Структура проекта Laravel 5 (система плагинов)

Я пытаюсь разработать свое первое приложение Laravel (5), которое можно расширить с помощью плагинов. Я много читал об архитектурах плагинов, но я борюсь с Лучший или предпочтительный способ организовать такой проект в Laravel. Я был бы очень благодарен за любую помощь и совет здесь, поскольку я не хочу отправиться в неверный путь.

Вот как я думаю о структурировании и реализации этого:

/ Plugins
- PluginManager.php

/ Contracts
- PluginInterface.php

/ Plugins

/ ExamplePlugin1
- ExamplePlugin1.php

/ ExamplePlugin2
- ExamplePlugin2.php

Вопрос 1: Где будет наилучшее место для корневого каталога / плагинов? Прямо в папке app / root или где-то вроде app / Http?

При запуске приложения я хочу, чтобы класс PluginManager сканировал подкаталог Plugins / Plugins /, поскольку там будут находиться все установленные плагины. В этот момент PluginManager создаст экземпляр отражения этих классов плагинов и сохранит их в массиве, чтобы впоследствии он мог их просматривать и вызывать методы, если они существуют.

Вопрос 2: Поскольку я хочу, чтобы PluginMananger был доступен для всех запросов, должен ли я для этого использовать поставщика услуг и фасад?

Вопрос 3: Является ли этот метод эффективным или кто-нибудь может предложить альтернативное решение?

Все эти плагины будут реализовывать интерфейс PluginInterface, чтобы класс PluginManager мог вызывать, например, функцию init () для всех плагинов.

Спасибо за ваше время

9

Решение

Вопрос 1

Самый простой способ сделать это — создать каталог «app / Plugins» («app /»).Http/ Плагины «, только если ваши плагины относятся к основному приложению или маршрутизации Laravel @RTM: «Представьте, что каталоги Console и Http предоставляют API в« ядро ​​»вашего приложения». ).

вопрос 2

ДА!
@увидеть: проблема производительности при использовании отложенных провайдеров

Вопрос 3

Может быть, вы можете сделать своего рода plugins.lock в корне своего приложения, чтобы не проверять «app / Plugins» при каждом запросе?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]