서비스 제공 업체의 부팅 기능 범위에서 사용할 때 facade가 작동하는 데 문제가 있습니다. 예제 코드는 아래와 같습니다.Laravel 4.1 - 서비스 제공 업체의 부팅 기능에서 호출했을 때 Facade가 작동하지 않음
클래스
namespace Vendor\Libraries;
class Foo {
public function bar()
{
echo 'bar';
}
}
외관
namespace Vendor\Facades;
use Illuminate\Support\Facades\Facade;
class Foo extends Facade
{
protected static function getFacadeAccessor() { return 'foo'; }
}
서비스 제공 업체
namespace Vendor\Package;
use Illuminate\Support\ServiceProvider;
class MyServiceProvider extends ServiceProvider {
public function boot()
{
$this->package('vendor/package');
}
public function register()
{
$this->app['foo'] = $this->app->share(function ($app) {
return new \Vendor\Libraries\Foo;
});
$this->app->booting(function() {
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Foo', 'Vendor\Facades\Foo');
});
}
}
이 잘 작동하고 다른 패키지의 서비스 공급자의 부팅 기능 범위 내에서 사용하려고 할 때를 제외하고는 예상대로 Facade를 사용할 수 있습니다. 예 : 오류
namespace OtherVendor\OtherPackage;
use Illuminate\Support\ServiceProvider;
class AnotherServiceProvider extends ServiceProvider {
public function boot()
{
$this->package('othervendor/overpackage');
\Foo::bar();
}
public function register()
{
}
}
결과 : 나는 app.php에 별칭 배열에 별칭을 추가하는 경우
Class 'Foo' not found
가 이상하게의 외관 작업 파일.
'aliases' => array(
'Foo' => 'Vendor\Facades\Foo',
)
나는 또한 대신 Foo::bar()
를 사용하는 함수를 호출 할 $this->app['foo']->bar()
를 사용하여 작동시킬 수있다; 그러나 bar()
함수의 몸체 범위에서 파사드를 사용하는 경우 해당 클래스를 찾을 수 없다는 오류가 발생합니다.
요약하면 AliasLoader
클래스를 사용하여 별칭을 추가하려고하면 app.php의 별칭 배열에 추가하는 대신 다른 서비스 공급자의 범위 내에서 호출 할 때 facade가 작동하지 않는 것으로 보입니다. 부팅 기능. 그것은 예상대로 모든 곳에서 작동합니다.
이 문제에 대한 도움이 될 것입니다.
미리 감사드립니다.