Структура папок Symfony2, приоритеты и порядок


Я иду от ASP.NET Мир MVC, где моя структура папок будет:

+ProjectName
    -App_Data (databases, xml's and such data)
    -App_Start (function bundles, routes, etc.)
    -Controllers
        -SampleController.cs
    -Models (though I'd usually call models from other projects)
    -Views
        -Sample
            -index.cshtml
    -Scripts
    web.config
    etc.

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

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

Я использовал команду для создания пакета:

$ php app/console generate:bundle --namespace=Sample/FooBundle --format=yml

И у меня есть несколько папок и подпапок и еще много чего, но также папка ресурсов, которая меня смутила.

Итак, что веб-приложение читает в первую очередь? Как контроллер выполняет поиск нужного представления? Сначала перейдите к

src/Sample/FooBundle/Resources/views/Default/index.html.twig

Или он переходит в

app/Resources/views/default/index.html.twig

Разумно ли хранить представления в пакетах или в "глобальной" папке приложения? Я также заметил, что внутри создаются конфигурации пакет (который, я подозреваю, имеет более высокую иерархию, чем "глобальные" приложения). Например, bundle AppBundle не имеет собственных представлений и конфигураций, что заставило меня задуматься, разумно ли вообще создавать представления внутри пакетов.

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

Author: NemanjaT, 2015-09-02

1 answers

По большому счету, все, что находится в пакете, может быть переопределено "глобальными" настройками и ресурсами приложения. Вероятно, наиболее полезными ресурсами для понимания этого являются записи кулинарной книги О том, как переопределить любую часть пакета и Как использовать наследование пакета для переопределения частей пакета.

Чтобы ответить на ваш вопрос о том, следует ли хранить представления в пакете или глобальной папке - все зависит от того, имеют ли представления смысл в самом пакете. Если что-то будет использоваться в нескольких пакетах (например, базовый шаблон макета), тогда это имеет больше смысла в папке app.

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

Вполне возможно иметь несколько пакетов приложений с такими вещами, как сущности и ресурсы, хранящиеся вне пакетов, например

src/Company
    Bundle/
        ManagerBundle/
        FrontendBundle/
    Entity/
    Event/

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

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

 4
Author: John Noel, 2015-09-02 11:29:59