라라벨에서 파사드 시작하기
Laravel로 우리 자신의 Facades를 구현하는 방법을 살펴보기 전에 먼저 Laravel이 Facades를 사용하는 방법에 대한 몇 가지 예를 살펴보겠습니다.
Laravel 프레임워크는 Facades를
vendor/laravel/frameworks/src/Illuminate/Support/Facades
디렉토리에 저장합니다. 거기에서 DB.php
, View.php
, Validator.php
, Request.php
와 같은 익숙한 것을 볼 수 있습니다. 이러한 파일 중 하나를 열면 다음과 같은 코드가 표시됩니다.class DB extends Facade
{
protected static function getFacadeAccessor()
{
return 'db';
}
}
이 클래스는
Facade
클래스(같은 디렉토리에 있는 Facade.php
)를 확장합니다. 그것을 열면 테스트 목적으로 많은 방법이 표시됩니다. 우리는 오늘 그것들을 다루지 않을 것입니다. 대신 __callStatic
메서드에 중점을 둘 것입니다. 이 메서드는 확장 클래스(예: getFacadeAccesor()
클래스)에서 DB
메서드를 호출하고 해당 메서드에서 반환되는 클래스의 인스턴스를 확인합니다. 이 경우 db
클래스입니다.기본
Facade
클래스에서 메서드 호출을 추적하려고 해도 정말 혼란스럽게 들립니다. 그럼 먼저 간단한 예를 살펴보겠습니다.app/ShowName.php
파일을 만들고 다음을 추가합니다.<?php
namespace App;
class ShowName {
public static function __callStatic($method, $arguments)
{
dd($method);
}
}
그런 다음
routes/web.php
파일에 다음 경로를 추가합니다.Route::get('show', function(App\ShowName $obj) {
$obj::someMethodName('cat', 'dog');
});
그러면 "somemethodName"또는 호출한 메서드가 출력되어야 합니다.
여기에서 메서드에 전달된 인수에 액세스할 수도 있습니다.
dd($arguments);
그러면 다음 출력이 표시됩니다.
array:2 [▼
0 => "cat"
1 => "dog"
]
이것이 Facades 작동 방식의 기본 아이디어입니다. Facade에는 이
__callStatic()
메서드가 있어 서비스 컨테이너에서 기본을 확인합니다. 이것은 Facades가 실제로 서비스 컨테이너를 사용하는 것을 대체하지 않는다는 것을 의미합니다. 메서드를 더 쉽게 호출할 수 있도록 하는 보완 기능입니다.이제 Facades가 배후에서 어떻게 작동하는지 알았으므로 이제 직접 구현해 보겠습니다.
이전의
app/ShowName.php
파일을 열고 __callStatic()
메서드를 다음으로 업데이트합니다.public static function __callStatic($method, $arguments)
{
return (self::resolveFacade('ShowName'))->$method(...$arguments);
}
그런 다음 이 메서드를 추가합니다.
public static function resolveFacade($name)
{
return app()[$name];
}
이 메서드는 서비스 컨테이너에서 특정 클래스를 확인합니다. 이것은 앱 서비스 공급자에서 Facade를 바인딩하는 경우에만 작동합니다.
// app/Providers/AppServiceProvider.php
$this->app->bind('ShowName', function () {
return new ShowNameService;
});
ShowNameService
에는 다음이 포함됩니다.<?php
// app/Services/ShowNameService.php
namespace App\Services;
class ShowNameService {
public function hello($name)
{
return 'hello ' . $name;
}
}
그런 다음
config/app.php
파일을 열고 aliases
배열에 새 항목을 추가합니다.'aliases' => [
// ...
'ShowName' => App\ShowName::class, // add this
],
완료되면 이제
ShowNameService
파사드를 사용하여 ShowName
클래스에서 메서드를 호출할 수 있습니다.Route::get('hello', function() {
return ShowName::hello('cat'); // outputs: "hello cat"
});
그런 다음
ShowNameService
클래스에 새 메서드를 추가하는 경우:public function hi($name)
{
return 'hi ' . $name;
}
여전히 Facade를 통해 호출할 수 있어야 합니다.
ShowName::hi('cat'); // outputs: "hi cat"
matthaeus의 표지 이미지: https://unsplash.com/photos/hew8vAvvvz4
Reference
이 문제에 관하여(라라벨에서 파사드 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wernancheta/getting-started-with-facades-in-laravel-5796텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)