Symfony2 «PluginBundle»

0

В настоящее время я думаю о том, как реализовать плагиновую функцию для моего приложения symfony2.

Мои цели заключаются в следующем:

  • В принципе, плагин должен быть пакетом (по крайней мере, служба, прослушиватель событий, маршрутизация, сущности, миграции, представления и контроллеры должны быть зарегистрированы)
  • AppKernel не должен быть затронут каким-либо образом конечным пользователем или приложением
  • Плагины должны предоставлять метаинформацию (название, описание, скриншот/изображение, автор и т.д.).
  • плагины должны управляться из бэкэнд (активация, деактивация, установка, удаление, обновление и т.д.).
  • плагины могут поступать из разных источников (Core, Community, Local, например, в магазине) и должны быть разделены путем сохранения пути
  • автоматическая загрузка без запуска композитора

Моя проблема будет примерно такой: как загрузить пакет после того, как ядро уже загружено (поскольку информация о том, какие плагины активны, должна находиться в базе данных идеально, а не внутри какого-либо файла на жестком диске, но может быть кэширована). Я не нашел ни одного пакета или записи повара на эту тему. Есть ли практика, управляющая чем-то подобным? Возможно, я думаю не в том направлении.

Я надеюсь, что есть кто-то, у кого может быть полезная идея и вид знаний о symfony2, которого у меня нет.

PS: Пока нет кода, так как это всего лишь некоторое размышление над концепцией о том, как справиться с этим.

  • 0
    Что касается вашего второго пункта, вы можете взглянуть на эту статью об OroCRM и его методе добавления пакетов без редактирования AppKernel: oro-quickies.alanstorm.com/…
Теги:
plugins

1 ответ

0

AppKernel возвращает зарегистрированные пакеты как массив, поэтому, полагая, что метод хранения, который вы используете для определения активных плагинов, не привязан к Symfony (т.е. Вы можете получить к нему доступ до того, как приложение будет полностью загружено), тогда это должно быть так же просто добавив что-то подобное вашему AppKernel.php:

public function registerBundles()
{
    ...
    ...
    $bundles = array_merge($bundles, MyApp\PluginManager::getPluginBundles());
    ...
    return $bundles;
}

Предоставление метаданных плагина может быть выполнено различными способами (возможно, только определенным каталогом location/в файлах плагинов, в которых хранятся файлы txt/image), но загружать все, что должно быть легко, когда у вас есть материал для управления плагинами (и вы можете легко получить установленных плагинов и т.д.).

  • 0
    Здравствуйте, метаданные должны быть тихими, легкими, да. Я просто поместил это для полноты. Механизм хранения будет настроен в Symfony (Doctrine ORM), поэтому я думаю, что он не будет доступен до того, как приложение хотя бы частично загрузится

Ещё вопросы

Сообщество Overcoder
Наверх
Меню