Я делаю свои первые шаги в 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 и файлы конфигурации.
удалять storage/framework/services.json
файл.
Laravel кэширует все данные поставщиков услуг в этом файле.
Всегда смотрите на этот файл при отладке поставщиков услуг.
Вот очень полезный ответ о поставщиках услуг и файле services.json
./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
воссоздан.