Как структурировать проект в Symfony2? - PullRequest
18 голосов
/ 10 июля 2011

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

Теперь в Symfony2 все является пакетом. Что мне не совсем понятно, так это то, как я мог бы представить «два» приложения: внешний и внутренний. Должен ли я создать два пространства имен - внешний и внутренний? Я хотел бы хранить свои сущности в одном месте, а не получать к ним доступ из двух приложений.

Ответы [ 4 ]

12 голосов
/ 12 июля 2011

Просто создайте одно приложение, создайте AdminBundle или BackendBundle или что-то еще для вашего проекта, в котором есть все инструменты, которые вам понадобятся в бэкэнде, и используйте брандмауэры и списки контроля доступа в security.yml для создания отдельных маршруты для двоих.

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

Эта запись в документации о безопасности - хорошее место для начала изучения контроля доступа и брандмауэров. Вот краткий пример того, как выглядит моя конфигурация безопасности:

firewalls:
    main:
        pattern: /.*
        anonymous: true
        form_login: true

access_control:
    - { path: /admin/.*, roles: ROLE_ADMIN }
    - { path: /.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }

Если вы хотите полностью разделить аутентификацию для / и / admin, создайте новый брандмауэр администратора: брандмауэры не передают друг другу информацию об аутентификации, поэтому вы можете отслеживать пользователей и их сеансы отдельно, если хотите.

6 голосов
/ 11 июля 2011

Я попробовал подход, предложенный PAStheLoD (создание app_backend, web_backend и т. Д.), Но я нашел это слишком сложным; Вы должны помнить, какое приложение выбрать из консоли, поддерживать отдельные файлы начальной загрузки, и структура каталогов становится беспорядочной.

Метод, рекомендуемый документацией Symfony Документация Symfony - это создать отдельный проект для каждого приложения. Затем вы можете создать отдельную область для своего исходного кода, написать большую часть (если не все) ваших пакетов и затем просто настроить их включение в autoload.php обоих приложений.

, например

admin_app/
    app/
    bin/
    src/
    web/
frontend_app/
    app/
    bin/
    src/
    web/
common_src/
    Acme/
        AdminBundle/
        DataBundle/
        jQueryBundle/

Затем в * _app / app / autoload.php:

$loader->registerNamespaces(array(
    'Acme' => __DIR__ . '/../../common_src'
));
2 голосов
/ 14 сентября 2012

Как насчет наличия одного приложения и создания трех пакетов: src / Vendor / BackendBundle, src / Vendor / FrontendBundle и src / Vendor / SharedBundle.SharedBundle содержит объекты и другие общие части между FrontendBundle и BackendBundle

2 голосов
/ 11 июля 2011

Насколько я знаю, вы все еще можете делать более или менее то же самое с Symfony2.Просто переименуйте app / в app_frontend и сделайте копию в app_backend, также дублируйте web / таким же образом.Тогда все остальное может жить в связках.Пакеты очень мощные, потому что они могут содержать маршруты, конфигурацию или что-то еще, поэтому вы можете поделиться тем, что вы хотите, и идеально изолировать то, что вы не хотите делить.сценарии из-за переименованных каталогов, но вы просто должны правильно их настроить (или поднять их как проблему на сайте Symfony на Github).

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