Структура папок 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
не имеет собственных представлений и конфигураций, что заставило меня задуматься, разумно ли вообще создавать представления внутри пакетов.
Если бы я мог получить простой ответ или, по крайней мере, ресурс об этом, который мог бы объяснить причину всего этого, я был бы очень благодарен.
1 answers
По большому счету, все, что находится в пакете, может быть переопределено "глобальными" настройками и ресурсами приложения. Вероятно, наиболее полезными ресурсами для понимания этого являются записи кулинарной книги О том, как переопределить любую часть пакета и Как использовать наследование пакета для переопределения частей пакета.
Чтобы ответить на ваш вопрос о том, следует ли хранить представления в пакете или глобальной папке - все зависит от того, имеют ли представления смысл в самом пакете. Если что-то будет использоваться в нескольких пакетах (например, базовый шаблон макета), тогда это имеет больше смысла в папке app
.
Что касается вашей структуры пакетов - это изменилось с тех пор, как я начал работать с Symfony, поэтому я не являюсь авторитетом в этом вопросе. В настоящее время тенденция, похоже, такова, что если вы можете разделить функциональность на автономный пакет, сделайте это, в противном случае вставьте его в AppBundle
, который по умолчанию создается установщиком Symfony. Возможно, вы захотите ознакомиться с Лучшими практиками для многоразовых пакетов для получения дополнительной информации.
Вполне возможно иметь несколько пакетов приложений с такими вещами, как сущности и ресурсы, хранящиеся вне пакетов, например
src/Company
Bundle/
ManagerBundle/
FrontendBundle/
Entity/
Event/
Делаете ли вы это, полностью зависит от вас - ваш код, ваша организация, за исключением нескольких конкретных случаев, Symfony как фреймворк не будет жаловаться на это.
Что касается конфигураций пакетов, которые находятся выше в "иерархии", чем глобальные - обычно нет, хотя это связано с DI компонент. Это много, чтобы разобраться, но Кулинарная книга раздел "Конфигурация" - отличное место для начала.