如何在laravel 5中启动服务提供商


How to boot a service provider in laravel 5

我在Laravel 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";
});

结果是否定的。未加载服务提供程序。根据文件:

延迟加载此类提供程序将提高性能因为它不是从上的文件系统加载的每个请求。要延迟加载提供程序,请将defer属性设置为true

因此,我对protected $deferfalse进行相反的设置。但是dd()功能没有被触发。使用Service Provider类型很重要,因为这样我就可以从中加载lang、视图和配置文件

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

Laravel将所有服务提供商的数据缓存在此文件中。调试服务提供程序时,请始终查看此文件。

以下是关于服务提供商和services.json文件的非常有用的答案

Laravel 4如何加载延迟提供程序?

./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