Php Laravel 4.1-从服务提供商的启动函数调用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

在服务提供商的引导功能范围内使用facade时,我遇到了一个让facade工作的问题。下面是示例代码

阶级

门面

服务提供商

这非常有效,我可以按预期使用Facade,但有一种情况除外,即我尝试在另一个包的服务提供商的引导功能范围内使用Facade。例如:

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',
)