Конфиг, настройки модуля и пара слов о логах

Первое, с чего стоит начать разработку модуля, это настройки. В папке config создается php файл, с именем модуля. В нашем случае пусть это будет mxj-blog.php. Код должен возвращать массив с переменными. Конфиг используется для настроек модуля. Для начала имеет смысл вынести в конфиг метку модуля для логирования. Это чтобы в общих логах приложения легко находить нужные вам записи. Пример содержимого файла конфига:


return [
    'log-prefix' => 'addons.mxj-blog',
];

Регистрируем конфиг в секции register сервис провайдера:


    public function register()
    {
        …
        $this->mergeConfigFrom(__DIR__.'/../config/mxj-blog.php', 'mxj-blog');
        …
    }

Здесь mxj-blog - перфикс, с помощью которого мы можем обратиться к конфигу. Далее указываем приложению необходимость скопировать конфиг при установке, для этого в секции boot прописываем


    public function boot()
    {
        …
        $this->publishes([
            __DIR__.'/../config/mxj-blog.php' => config_path('mxj-blog.php'),
        ]);
        …
    } 

Теперь после установки модуля можно вызвать команду php artisan vendor:publish и наш конфиг будет автоматически опубликован среди других файлов конфигурации приложения. Главное, что бы имена файлов не совпали. Тогда запись в лог будет выглядеть так:


use Illuminate\Support\Facades\Log;
…
Log::info(config('mxj-blog.log-prefix'), ['example' => 'message']);

В конфиг пойдут любые настройки, внесение которых позволит быстро настраивать модуль без изменения кода. Выбор таких настроек целиком основывается на здравом смысле. В целом – если неймется завести глобальную переменную, лучше вынесите ее в конфиг.

Команду publish можно использовать для размещения файлов в общем доступе, например, папки с изображениями:

$this->publishes( [__DIR__.'/public' => public_path( 'vendor/blog' )], 'public');

Тут последний аргумент - тег, с помощью которого можно публиковать только определенные файлы или папки:

php artisan vendor:publish --tag=public --force

Если вы используете composer версии более 2.1, то этот процесс можно автоматизировать:

"post-update-cmd": [
   "@php artisan vendor:publish --tag=public --force",
   ...
19.07.2021