Symfony2: структура кода для веб-сайта, мобильного веб-сайта и API?

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

Однако я понятия не имею, как структурировать свой проект. Может быть, есть какие-то рекомендации, как подойти к этой проблеме?

Стоит ли создавать каждый компонент как отдельный пакет? Например. CoreBundle, APIBundle, WebsiteBundle и MobileWebsiteBundle, тогда как CoreBundle будет содержать все модели и проверки, а также другие контроллеры и представления Bundles?

Или есть совсем другой способ?


person XM2    schedule 30.12.2012    source источник


Ответы (1)


Вам не нужно помещать весь свой код в пакеты. На самом деле, чем больше кода вы туда помещаете, тем больше вы связываете его с фреймворком.

Рассмотрите возможность выделения некоторого кода, не относящегося к Symfony, в отдельные пространства имен и относитесь к пакетам больше как к клею между вашим кодом PHP и фреймворком Symfony.

Например:

  • Acme
    • Bundles
      • ApiBundle
      • Веб-сайтBundle
    • Сущность
    • Инструменты
    • Веточка

Если вы решите поместить сущности за пределы пакета, вам придется настроить новое сопоставление в app/config/config.yml:

doctrine:
    orm:
        mappings:
            Bossa:
                type:       annotation
                is_bundle:  false
                dir:        %kernel.root_dir%/../src/Acme/Entity
                prefix:     Acme\Entity\
                alias:      Acme
person Jakub Zalas    schedule 30.12.2012
comment
Преимущество размещения кода внутри пакетов заключается в том, что многие инструменты/пакеты, такие как Assetic, Doctrine, используют предварительно настроенные каталоги пакетов (<bundle>/Entity, <bundle>/Resources/views) для поиска/загрузки ресурсов. Всегда можно заставить эти инструменты загружать ресурсы вне пространства пакета, но это требует дополнительной настройки. - person noisebleed; 30.12.2012
comment
Настройка сопоставлений ORM для сущностей проста. Кроме того, я не советую класть все за пределы пакета. Извлечение представлений не имеет особого смысла (но расширения twig имеют смысл, если их можно использовать повторно). - person Jakub Zalas; 31.12.2012
comment
Что вы думаете о создании еще одного ядра для API с именем ApiKernel и как насчет уже существующих пакетов? Например, я храню все пакеты в src/VendorName/, и это связано с PSR-0, но я хочу переместить их в каталог с именем Bundles, как показано выше. Я думаю, это интересный способ. - person Igor Timoshenko; 31.12.2012
comment
Перемещение пакетов в пространство имен Bundle не должно быть сложным (вам придется исправить пространства имен и имена пакетов). Создавайте ApiKernel, только если вам нужно разделение. Это будет зависеть от проекта, звучит хорошо в вашем случае. Вам также потребуются отдельные передние контроллеры и конфигурации. - person Jakub Zalas; 31.12.2012