Php Laravel 4.1-从服务提供商的启动函数调用Facade时,Facade不工作
在服务提供商的引导功能范围内使用facade时,我遇到了一个让facade工作的问题。下面是示例代码 阶级 门面 服务提供商 这非常有效,我可以按预期使用Facade,但有一种情况除外,即我尝试在另一个包的服务提供商的引导功能范围内使用Facade。例如:Php Laravel 4.1-从服务提供商的启动函数调用Facade时,Facade不工作,php,laravel-4,facade,Php,Laravel 4,Facade,在服务提供商的引导功能范围内使用facade时,我遇到了一个让facade工作的问题。下面是示例代码 阶级 门面 服务提供商 这非常有效,我可以按预期使用Facade,但有一种情况除外,即我尝试在另一个包的服务提供商的引导功能范围内使用Facade。例如: namespace OtherVendor\OtherPackage; use Illuminate\Support\ServiceProvider; class AnotherServiceProvider extends Servic
namespace OtherVendor\OtherPackage;
use Illuminate\Support\ServiceProvider;
class AnotherServiceProvider extends ServiceProvider {
public function boot()
{
$this->package('othervendor/overpackage');
\Foo::bar();
}
public function register()
{
}
}
导致错误的原因:
Class 'Foo' not found
奇怪的是,如果我将别名添加到app.php文件中的别名数组中,facade就会工作
'aliases' => array(
'Foo' => 'Vendor\Facades\Foo',
)
我还可以使用$this->app['foo']->bar来调用函数,而不是使用foo::bar;但是,如果bar函数在其主体的范围内使用facade,那么我会得到一个错误,说明找不到该类
总之,如果我尝试使用AliasLoader类添加别名,而不是将其添加到app.php中的alias数组中,那么当在另一个服务提供商引导函数的范围内调用facade时,facade将无法工作。它在其他任何地方都能正常工作,但正如预期的那样
在这个问题上有任何帮助都会很好
提前感谢。这是一篇较旧的帖子,但我相信boot是在注册之前调用的。因此,在MyServiceProvider中的寄存器之前调用另一个ServiceProvider中的引导。据我所知。我认为这是寄存器和引导之间的主要区别。所以,将类MyServiceProvider的寄存器中的内容放在引导中,看看它是否工作
namespace OtherVendor\OtherPackage;
use Illuminate\Support\ServiceProvider;
class AnotherServiceProvider extends ServiceProvider {
public function boot()
{
$this->package('othervendor/overpackage');
\Foo::bar();
}
public function register()
{
}
}
Class 'Foo' not found
'aliases' => array(
'Foo' => 'Vendor\Facades\Foo',
)