Я пытаюсь разработать свое первое приложение 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 () для всех плагинов.
Спасибо за ваше время
Вопрос 1
Самый простой способ сделать это — создать каталог «app / Plugins» («app /»).Http/ Плагины «, только если ваши плагины относятся к основному приложению или маршрутизации Laravel @RTM: «Представьте, что каталоги Console и Http предоставляют API в« ядро »вашего приложения». ).
вопрос 2
ДА!
@увидеть: проблема производительности при использовании отложенных провайдеров
Вопрос 3
Может быть, вы можете сделать своего рода plugins.lock в корне своего приложения, чтобы не проверять «app / Plugins» при каждом запросе?
Других решений пока нет …