Модули Laravel

Чтобы упорядочить код приложения мы прибегаем к ряду мер. В том числе используем пространства имен и распределяем файлы по директориям. Про пространства имен вроде бы понятно. Вопрос что есть для Laravel для второго пункта.

В Laravel имеется такое решение как пакеты. Штатная штука и ее вроде бы можно использовать для модульности. Но для каждого пакета нужно будет очень много настроек прописывать вручную. Весь код лежать в packages/имя пакета/src … и выглядеть как нечто стороннее. Метод рабочий, но он, скорее, для подготовки пакетов, которые будут использоваться в других проектах.

Далее рассмотрим сторонние решения, которые делают модули в отдельной папочке Modules.

Что можно найти:

  • nWidart/laravel-modules (20 контрибьютеров; последний commit вчера; 700 с лишним звезд на github)
  • mrabbani/laravel_module_manager (2 контрибьютера; последний commit в апреле 2017; 60 звезд)
  • mnabialek/laravel-modular (1 контрибьютер; последний commit 11 месяцев назад; 16 звезд)
  • caffeinated/modules
    (26 контрибьютеров; последний commit в мае; 500 с лишним звезд)

Из статистики проектов видно, что лидерами являются nWidart/laravel-modules и caffeinated/modules. Хотя первый из них все же обновляется чаще.

Я немного рассмотрел их вблизи и попробовал создать с помощью каждого пару модулей с контроллерами в каждом. Получилось два микро проекта: проект для nWidart/laravel-modules и проект для caffeinated/modules.

Оба пакета выполняют свои функции. Умеют генерировать модули с помощью команд artisan. Правда, nWidart/laravel-modules, как можно было ожидать, все же немного более удобен. Например, в нем был генератор, который сразу создавал и маршрут, контроллер-пример и представления. А в caffeinated/modules приходилось многое делать вручную или генерировать частями. Документация у первого куда как лучше.

Можно добавить еще, что nWidart/laravel-modules – это переделанная, переосмысленная и поддерживаемая версия пакета pingpong/modules. Так же данный пакет используется в AsgardCMS и имеет тесты.

Другими словами победитель очевиден.

Полезные ссылки:

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *