Как загрузить поставщика услуг в 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()')
}
}

На самом деле этот файл — это путь от root:

/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 $defer в false, Но dd() функция не срабатывает.
Важно использовать тип Service Provider, потому что таким образом я мог загружать из него lang, views и файлы конфигурации.

1

Решение

удалять storage/framework/services.json файл.

Laravel кэширует все данные поставщиков услуг в этом файле.
Всегда смотрите на этот файл при отладке поставщиков услуг.

Вот очень полезный ответ о поставщиках услуг и файле services.json

Как Laravel 4 загружает отложенного провайдера?

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

1

По вопросам рекламы [email protected]