Как структурировать проект в Symfony2?

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

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

4 ответа

Решение

Просто есть одно приложение, создайте 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, создайте новый брандмауэр администратора: брандмауэры не обмениваются информацией аутентификации друг с другом, поэтому вы можете отслеживать пользователей и их сеансы отдельно, если хотите.

Я попробовал подход, предложенный 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'
));

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

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

Могут быть некоторые проблемы с bin / scripts из-за переименованных каталогов, но вам просто нужно правильно их настроить (или поднять это как проблему на сайте Github Symfony.)

Другие вопросы по тегам