#plugins #symfony #admin
#Плагины #symfony #администратор
Вопрос:
Я хочу создать пакет администратора, который каким-то образом обнаруживает другие пакеты и пытается добавить их в меню и в тот же контекст RBAC.
Например:
- AdminBundle определяет маршрут / admin / dashboard, который требует аутентификации и авторизации. В меню вы можете увидеть 3 пункта, например: панель мониторинга, конфигурация (некоторые конфигурации хранятся в БД) и пользователи (CRUD для пользователей, найденный в UserBundle)
- Затем кто-то добавляет ProductBundle, который имеет дело с CRUD для продуктов электронной коммерции или что-то в этомроде. Каким-то образом, без изменения какого-либо кода в AdminBundle, у нас теперь есть новый пункт «продукты», доступный в меню в /admin / dashboard
- Позже CRUD продуктов больше не нужен, поэтому мы просто удаляем ProductBundle, и он автоматически исчезает из меню панели администратора.
Как бы вы приступили к реализации чего-то подобного? Есть ли какая-либо встроенная поддержка плагиноподобного дизайна, подобного этому, в symfony 2?
Ответ №1:
Я не знаю о полноценном решении для плагинов, но мой подход был бы:
Есть один «главный серверный сервер», назовите его MasterAdminBundle
для удобства разговора. Этот пакет содержит base.html.twig, который просто помогает определить панель навигации в области администрирования и {% block content %}
. В нем также есть какой-то MenuService
, который отображает меню. Я бы попросил другие мои пакеты зарегистрировать в этом сервисе AdminMenu
подкласс посредством использования системы тегов точно так же, как Voter
можно зарегистрироваться в Security Context
(см. Здесь).
В base.html.twig я бы, скорее всего, использовал встроенный контроллер для отображения меню.
Теперь, когда такая структура установлена, ваши другие пакеты могут оставаться инкапсулированными, сохраняя свои собственные маршруты администрирования и интерфейсы:
ProductController
теперь также было бы, ProductAdminController
где вы можете использовать префикс маршрута @Route("/admin")
в определении класса. Затем любые маршруты могут отображать шаблоны из пакета, поскольку шаблоны хранятся под именем контроллера. AcmeProductBundleResourcesviewsProductAdminedit_products.html.twig
при условии, что они расширяют base.html.twig
from MasterAdminBundle
и помещают свой контент в content
блок.
Для других вещей, таких как панель мониторинга, к которой вы хотели подключить другие пакеты, я, скорее всего, просто продолжу действовать тем же путем, создам сервис в MasterAdminBundle
и использую теги для загрузки в него других классов с требуемыми данными.
Надеюсь, это имеет смысл, возможно, у других найдется лучшее решение для этого, мне также интересно услышать, поскольку это то, чем я тоже пытаюсь заняться в данный момент.
Комментарии:
1. Интересно. Я не использовал систему тегов, я буду читать об этом. Спасибо