Сервис провайдер
Основой модуля является сервис-провайдер, это файл и класс регистрируемый в основном приложении. Название файлу лучше давать по названию модуля, например BlogServiceProvider.php
. Файл сервис-провадера традиционно лежит в папке: src/BlogServiceProvider.php
В сервис провайдере прописываются основные настройки модуля. Для этого в нем есть две функции register
и boot
. Соответственно первая регистрирует в приложении нужные нам классы, а вторая отвечает за публикацию необходимых нам настроек при установке модуля. Пример пустого сервис-провайдера:
namespace MXJ\Addons\Blog;
use Illuminate\Support\ServiceProvider;
class BlogServiceProvider extends ServiceProvider
{
public function register()
{
}
public function boot()
{
}
}
То, что нужно будет прописать в эти функции сервис провайдера, зависит от функционала модуля. Об этом поговорим позже. После установки модуля в основное приложение, необходимо зарегистрировать сервис провайдер в config/app.php
:
\MXJ\Addons\Blog\BlogServiceProvider::class,
Важно! Следует быть аккуратным в том, что вы прописываете в функциях сервис-провайдера. Некоторые настройки носят глобальный характер и влияют на все приложение. Например, если в функции boot прописать
Paginator::useBootstrap();
То во всем приложении будет использоваться пагинация через bootstrap.
Composer.json
После создания файла BlogServiceProvider.php
в composer.json необходимо внести следующие записи:
"autoload": {
"psr-4": {
" MXJ\\Addons\\Blog\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
" MXJ\\Addons\\Blog\\Tests\\": "tests/"
}
},
"scripts": {
"test": "vendor/bin/phpunit"
},
"extra": {
"laravel": {
"providers": [
" MXJ\\Addons\\Blog\\BlogServiceProvider"
]
}
}
Автозагрузка поможет автоматически цеплять приложению необходимые классы из модуля. Если вы не используете юнит тесты, то autoload-dev можно не прописывать. Кроме того composer.json должен содержать путь к вашему репозиторию, например, на github. А также должны быть прописаны следующие библиотеки и зависимости:
"name": "maxvdovin/mxj-blog",
"require": {
"php": "^7.3|^8.0",
"laravel/framework": "^8.0"
},
"require-dev": {
"phpunit/phpunit": "^9.3.3",
"mockery/mockery": "^1.4.2"
}
При необходимости список библиотек расширяется. Подробно расписывать содержимое composer.json не имеет смысла, за основу можно взять любой composer популярных модулей для Laravel.
Установить модуль в основное приложение можно несколькими способами. Основной - с помощью команды composer require maxvdovin/mxj-blog
. Или можно прописать модуль composer.json, например так:
"maxvdovin/mxj-blog": "~0.1",
А затем вызвать команду composer install
. Если у вас приватный модуль, то необходимо добавить раздел репозиторий в composer.json:
"repositories": [
{
"type": "vcs",
"url": "git@github.com:maxvdovin/mxj-blog.git"
}
]