Symfony Framework « Как лучше организовать разделение админки и фронта в Symfony 2?

Хочу разделить админку и фронтенд проекта на Symfony 2, используя Doctrine 2 в качестве ORM. При этом у админки и фронта должны быть разные layout-ы, своя авторизация, а роуты в админке должны идти через префикс, допустим, /admin. В Symfony 1.4 все было понятно, разделение было на уровне приложений. В Symfony 2 приложение одно, но появились понятия namespace и bundle. Мне интересно, что в таком случае является "лучшей практикой"? Пока мне в голову пришли только эти варианты (случай с двумя приложениями не рассматриваю):
  1. Сделать по варианту "все в одном" (бандле). Т.е. не делать структурного разделения, все экшны, как админские, так и фронтальные хранить в одной папке, разделяя, например, по префиксам контроллеров. (например, ArticlesController.php будет отвечать за фронтальное отображение статей, а AdminArticlesController.php - за админскую часть)
  2. Разделить по разным пространствам имен. Структура получается прозрачная, но возникает вопрос о том, где хранить классы-сущности доктрины. Ведь они по-идее хранятся внутри соответствующего бандла, а должны быть доступны (одни и те же) как в админке, так и на фронте.
  3. Создать отдельный bundle для админки. Снова возникает вопрос о хранении сущностей, да и в бандле получится нагромождение контроллеров и представлений. Мне кажется, не очень красивое решение.
  4. Использовать подпространства имен для контроллеров, представлений, и, наверное, роутов. В таком случае в каждом бандле будут как админская часть, так и фронтальная. При чем они будут разделены по разным подпространствам имен и папкам (например в папке Controller будут лежать две папки: Frontend и Backend).

Пока последний вариант мне кажется наилучшим, хотя и сложноватым. Хотелось бы узнать как кто решает подобные задачи, и какой вариант лучше использовать.

1 ответов


1. чаще всего я использую этот вариант
2. Разные пространства имён в симфони - разные bundle, так что тут получается вариант №3
3. Посмотрите пример SonataAdminBundle, если у вас сложная админка это оптимальный вариант, но свою админку подобного плана сложновато и затратно по времени писать
4. вариант совсем несложный если для маршрутизации использовать аннотации

А вообще я админку делаю как в п.4 на Sencha ExtJS, вроде бы неплохо получается, но пока решения которое было бы не стыдно показать нет.