2015-02-06 80 views
1

我正在迈出Laravel 5的第一步,特别是与包开发。我的这个包的目的是始终在每一个请求中引导。如何在laravel 5中启动服务提供程序5

于是,我开始创建服务HelloWorldServiceProvider:

<?php 
namespace FacebookKiller\Modules\HelloWorld; 

use Illuminate\Support\ServiceProvider; 

class HelloWorldServiceProvider extends ServiceProvider{ 

    protected $defer = false; 

    public function boot(){ 
     dd('hello world at boot()') 
    } 

    public function register() 
    { 
     dd('hello world at register()') 
    } 
} 

其实,此文件是从根路径:

/Larave/app/Modules/HelloWorld/HelloWorldServiceProvider.php 

然后,我为了添加服务编辑config/app.php文件提供商

'Illuminate\Translation\TranslationServiceProvider', 
'Illuminate\Validation\ValidationServiceProvider', 
// my module 
'FacebookKiller\Modules\HelloWorld\HelloWorldServiceProvider' 

最后,为了测试是否dd()叫,我已编辑routes.php文件,如:

Route::get('test', function(){ 
    return "Making a test request"; 
}); 

的结果是否定的。服务提供者未加载。根据文档:

推迟这样一个提供的载荷将提高应用程序的性能 ,因为它不是从文件系统加载上 每个请求。 要推迟一个供应商的加载,设置延迟属性为true

所以,我做了相反的设置protected $deferfalse。但是dd()函数没有被触发。 使用服务提供者类型很重要,因为通过这种方式我可以从它加载lang,视图和配置文件。

+1

open storage/framework/services.json文件,你看到你的提供者类在这个文件中吗?如果没有,删除这个文件,laravel会再次生成它。 – 2015-02-06 07:50:42

+0

@MartirosAghajanyan,你修好了!谢谢!请创建接受它的答案。 – manix 2015-02-06 08:18:17

回答

4

删除storage/framework/services.json文件。

Laravel缓存此文件中的所有服务提供者数据。 调试服务提供商时务必查看此文件。

这里是关于服务提供商和services.json文件

How does Laravel 4 load deferred provider?

1

./artisan clear-compiled 也做的伎俩非常有用的答案。 找到这个解决方案后,我认为必须有一个artisan命令。宾果,已经有了。看看它的代码,我看到除了清除已编译的类文件外,它也清除了services.json

public function fire() 
{ 
    if (file_exists($path = $this->laravel->storagePath().'/framework/compiled.php')) 
    { 
     @unlink($path); 
    } 

    if (file_exists($path = $this->laravel->storagePath().'/framework/services.json')) 
    { 
     @unlink($path); 
    } 
} 

在应用程序的下一个引导services.json被重新创建。