2015-02-06 2 views
1

Я делаю первые шаги в 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' 

И, наконец, для проверки, еслиназывается, я редактировал файл routes.php как:

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

Результат отрицательный. Поставщик услуг не загружен. Согласно документации:

Отсрочка загрузки такому провайдера улучшит производительность вашего приложения, так как он не загружен из файловой системы на каждый запрос. Перенести загрузку поставщика, установите свойство Отнести к истинному

Таким образом, я делаю установку protected $defer к false наоборот. Но функция dd() не запускается. Важно использовать тип поставщика услуг, потому что таким образом я могу загрузить с него lang, views и config файлы.

+1

файл открытого хранилища/рамки/services.json, вы видели свой класс провайдера в этом файле? Если нет, удалите этот файл, laravel будет генерировать его снова. –

+0

@MartirosAghajanyan, вы это исправите! Спасибо! Пожалуйста, создайте ответ, чтобы принять его. – manix

ответ

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 воссоздан.

Смежные вопросы