закрыть окно

Про plugsystem

  • Артем

  • 0

  • 12 Feb 2017

Про plugsystem

Вообще разрабатывая на фреймворке например на yii2 , прежде чем собственно писать код вы должны определить  роутинг( процесс маршрута от GET запроса до нужного контроллера) . Я считаю что это неправильно,так как это занимает довольно продолжительную часть времени. Достаточно посмотреть в сторону  CMS ,например в  Joomla(я буду говорить про старые версии,так как  CMSки не использую уже где-то  года 3-4)  Так вот в Joomla каждое расширение имеет свой уровень доступа. Грубо говоря есть одна frontend часть ( для обычных пользователей) , есть backend часть ( для администраторов) . В то время когда разрабатывали Joomla  ,  у  PHP не было таких возможностей как сейчас. И поэтому создателям Joomla требовалось разрабатывать свои "велосипеды" для работы по MVC. Но сейчас на дворе 2017 год поэтому все можно сделать гораздо проще.

Поэтому изначальная идея plugsystem в том чтобы организовать архитектуру  так чтобы при расширении или отключении функционала не требовались дополнительные зависимости. Так чтобы то что например хорошо работает на yii2 можно было спокойно перенести на laravel или symfony.  Но на текущий момент все опыты проходят только с yii2.

Как все работает будет показано на картинке ниже:

В чем суть,мы создаем обьект конструктора в который передаем параметры. Эти параметры в себя включают папка где находятся отображения (views),  namespace по котому  определяются плагины. Для отдельных менеджеров есть дополнительные параметры .Как например для backend менеджер нужно дополнительно указывать логин и пароль администратора.

Конструктор на основе переданных в него параметрах анализирует какой менеджер нужно вызвать, если например путь совпадает  с путем для админки,то вызывается BackEnd менеджер. Если не совпадает то вызывается FrontEnd менеджер. 

После вызова менеджера идет поиск нужного контроллера  согласно установленному параметру namespace. Если например вы установили namespace \plugtest\  то например заходя по адресу  http://site.ru/first/second/third   , будет искаться плагин у которого начальный роутинг first. В случае если такой плагин будет найден,то  дальше будет поиск Контроллера по следующему методу ,будет искаться   \plugtest\названиеплагина\controllers\frontend\ThridSecondFirst.php с методом actionIndex, если такого контролера нет,то следущий вариант будет \plugtest\названиеплагина\controllers\frontend\SecondFirst.php метод actionThird либо \plugtest\названиеплагина\controllers\frontend\First.php метод actionSecond и  в качестве аргумента third в случае если и этот не найден то  по умолчанию будет вызван  \plugtest\названиеплагина\controllers\frontend\First.php метод actionIndex в качестве аргументов будет выступать second и third . 

frontend который присутствует в namespace контроллеров задается внутри Менеджера. Поэтому для каждого спектора действий вы можете сами создать ограничения через Менеджеров.  Например один менеджер для frontend ,другой менеджер для backend ,третий менеджер для выполнения cron.  Прибавьте ко всему этому возможность создания произвольных событий,и получится полностью расширяемая система.   

На текущий момент уже есть два wrapper под  yii2 ,один из которых работает с mongodb ,а другой с sql. В любом случае то что написано здесь всего лишь небольшое введение в библиотеку plugsystem. Спасибо за внимание :)

Теги:php7

Псс..... чувак, а записью поделится не хочешь?

Псс... а подписаться не хош?

Комментарии

Чтобы оставить комментарий вам нужно авторизоваться!