Я пришел из мира 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
и у меня есть несколько папок и подпапок и еще много чего, а также папка Resource, что меня смутило.
Итак, что сначала читает веб-приложение? Как контроллер ищет нужный вид? Сначала идет
src/Sample/FooBundle/Resources/views/Default/index.html.twig
или это идет к
app/Resources/views/default/index.html.twig
Разумно ли хранить представления в связках или в «глобальной» папке приложения? Я также заметил, что внутри пакета создаются конфигурации (которые, я подозреваю, имеют более высокую иерархию, чем «глобальные» приложения). Например, связка AppBundle
не имеет своих собственных представлений и конфигураций, что заставило меня задуматься о том, разумно ли вообще создавать представления внутри связок.
Если бы я мог получить простой ответ или хотя бы ресурс об этом, который мог бы объяснить причину всего этого, я был бы очень благодарный.
По большому счету, все, что находится в Пакете, может быть переопределено «глобальными» настройками и ресурсами приложения. Вероятно, наиболее полезными ресурсами для понимания этого являются записи поваренной книги. Как переопределить любую часть пакета а также Как использовать Наследование пакетов для переопределения частей пакета.
Чтобы ответить на ваш вопрос о том, следует ли сохранять представления в пакете или глобальной папке — все зависит от того, имеют ли представления смысл в самом пакете. Если что-то будет использоваться в нескольких пакетах (например, базовый шаблон макета), тогда это имеет больше смысла в app
папка.
С точки зрения вашей структуры комплектации — это изменилось с тех пор, как я начал работать с Symfony, поэтому я не авторитет в этом. В настоящее время тенденция выглядит так: если вы можете разделить функциональность на отдельный пакет, сделайте это, в противном случае вставьте его в AppBundle
это по умолчанию создается установщиком Symfony. Возможно, вы захотите взглянуть на Лучшие практики для многоразовых комплектов для дальнейшей информации.
Вполне возможно иметь несколько пакетов приложений с такими вещами, как сущности и ресурсы, которые хранятся вне пакетов, например
src/Company
Bundle/
ManagerBundle/
FrontendBundle/
Entity/
Event/
Независимо от того, делаете ли вы это, зависит только от вас — от вашего кода, от вашей организации, за исключением нескольких конкретных случаев, Symfony как платформа не будет жаловаться на это.
Что касается конфигураций комплекта, которые находятся выше в «иерархии», чем глобальные, — обычно нет, хотя это связано с компонентом DI. Это много, чтобы разобраться, но Поваренная книга Раздел «Конфигурация» — отличное место для начала.
Других решений пока нет …