Как создать гибкую админ-панель с пакетами Symfony 2? - PullRequest
1 голос
/ 13 ноября 2011

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

Например:

  • AdminBundle определяет маршрут / admin / dashboard, который требует аутентификации и авторизации. Там вы можете увидеть 3 пункта в меню, например: панель инструментов, config (некоторые конфигурации хранятся в БД) и пользователи (CRUD для пользователей, найденный в UserBundle)
  • Затем кто-то добавляет ProductBundle, который имеет дело с CRUD для продуктов электронной коммерции или чего-то еще. Каким-то образом, без изменения какого-либо кода в AdminBundle, у нас теперь есть новый пункт «продукты», доступный в меню в / admin / dashboard
  • Позже, продукты CRUD больше не нужны, поэтому мы просто удаляем ProductBundle, и он автоматически исчезает из меню панели администратора.

Как бы вы реализовали нечто подобное? Есть ли в symfony 2 встроенная поддержка подобного плагину дизайна?

1 Ответ

5 голосов
/ 13 ноября 2011

Я не знаю о полном решении плагинов, но мой подход был бы:

Существует один "главный бэкэнд", который называется MasterAdminBundle ради разговора. Этот комплект содержит файл base.html.twig, который просто помогает определить панель навигации в области администрирования, и {% block content %}. Он также имеет вид MenuService, который отображает меню. Я бы хотел, чтобы мои другие пакеты регистрировались в этой службе в подклассе AdminMenu посредством использования системы тегов , так же как Voter может зарегистрироваться в Security Context (см. здесь ).

В base.html.twig я бы, вероятно, использовал Embedded Controller для визуализации меню.

Теперь при наличии такого рода фреймворков ваши другие пакеты могут оставаться инкапсулированными, сохраняя свои собственные маршруты и интерфейсы администратора:

ProductController теперь также будет иметь ProductAdminController, где вы можете использовать префикс маршрута @Route("/admin") в определении класса. Любые маршруты могут затем отображать шаблоны внутри пакета, поскольку шаблоны хранятся под именем контроллера. Acme\ProductBundle\Resources\views\ProductAdmin\edit_products.html.twig, пока они расширяют base.html.twig с MasterAdminBundle и помещают их содержимое в блок content.

Для других вещей, таких как панель инструментов, в которую вы хотите подключить другие комплекты, я, вероятно, просто продолжу идти тем же путем, создаю службу в MasterAdminBundle и использую теги для загрузки в нее других классов с необходимыми данными.

Надеюсь, что это имеет смысл, может быть, другие найдут лучшее решение для этого, мне также интересно услышать, так как это то, что я пытаюсь решить и в данный момент.

...