Я пытаюсь разработать свое первое приложение Laravel (5), которое можно расширить с помощью плагинов. Я много читал об архитектуре плагинов, но у меня возникли трудности с лучшим или предпочтительным способом организации такого проекта в Laravel. Я был бы очень благодарен за любую помощь и совет здесь, так как я не хочу идти по неправильному пути.
Вот как я думаю о структурировании и реализации этого:
/ Plugins
- PluginManager.php
/ Contracts
- PluginInterface.php
/ Plugins
/ ExamplePlugin1
- ExamplePlugin1.php
/ ExamplePlugin2
- ExamplePlugin2.php
Вопрос 1. Где лучше всего расположить корневой каталог /Plugins? Непосредственно в корневой папке app/ или где-то вроде app/Http?
При запуске приложения я хочу, чтобы класс PluginManager сканировал подкаталог Plugins/Plugins/, где будут находиться все установленные плагины. В этот момент PluginManager создаст экземпляр отражения этих классов плагинов и сохранит их в массиве, чтобы он мог перебрать их позже и вызвать методы для них, если они существуют.
Вопрос 2. Поскольку я хочу, чтобы PluginMananger был доступен для всех запросов, должен ли я использовать для этого поставщика услуг и фасад?
Вопрос 3. Эффективен ли этот метод или кто-нибудь может предложить альтернативное решение?
Все эти плагины будут реализовывать интерфейс PluginInterface, чтобы класс PluginManager мог вызывать, например, функцию init() для всех плагинов.
Спасибо за ваше время