Основа модуля - service provider, composer.json

Сервис провайдер

Основой модуля является сервис-провайдер, это файл и класс регистрируемый в основном приложении. Название файлу лучше давать по названию модуля, например 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"
        }
    ]
18.07.2021