我来自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.我已经阅读了一些文档并阅读了一两个教程,其中没有一个回答我一直在问自己的这个问题.
根据我的理解,捆绑包是我可以在当前项目中使用的Web应用程序的一部分以及我制作的其他项目.它们作为一个整体填充了某个Web应用程序功能.
$PHP app/console generate:bundle --namespace=Sample/FooBundle --format=yml
我有一些文件夹和子文件夹等等,但也是一个资源文件夹,这让我很困惑.
那么Web应用程序首先阅读什么?控制器如何搜索所需的视图?它首先去
src/Sample/FooBundle/Resources/views/Default/index.html.twig
还是去
app/Resources/views/default/index.html.twig
将视图保存在捆绑包或“全局”应用程序文件夹中是否明智?我还注意到在捆绑包内部进行了配置(我怀疑它的层次结构比应用程序’全局’的更高).例如,捆绑AppBundle没有自己的视图和配置,这让我想知道首先在bundle中创建视图是否聪明.
如果我能得到一个简单的答案,或者至少有一个关于它的资源可以解释所有这一切背后的原因,我会非常感激.
解决方法:
总的来说,Bundle中的任何内容都可以被“全局”应用程序设置和资源覆盖.理解这一点的最有用的资源可能是食谱条目How to Override any Part of a Bundle和How to Use Bundle Inheritance to Override Parts of a Bundle.
要回答关于是否在bundle或global文件夹中保留视图的问题 – 这一切都取决于视图是否在bundle本身内有意义.如果要在多个包中使用某些内容(例如布局基本模板),那么在app文件夹中更有意义.
在你的捆绑结构方面 – 自从我开始使用Symfony以来,这已经发生了变化,所以我不是这方面的权威.现在的趋势似乎是,如果您可以将功能拆分为自包含的捆绑包,请执行此操作,否则将在默认情况下由Symfony安装程序创建的AppBundle中将其弹出.您可能需要查看Best Practices for Reusable Bundles以获取更多信息.
完全可能具有多个应用程序包,其中诸如实体和资源之类的东西存储在包之外,例如,
src/Company
Bundle/
ManagerBundle/
FrontendBundle/
Entity/
Event/
无论你这样做完全取决于你 – 你的代码,你的组织,除了一些特定的实例,Symfony作为一个框架不会抱怨这一点.
至于捆绑配置在“层次结构”中比全局更高 – 通常没有,但这与DI组件相关联.让你的头脑发挥很多,但Cookbook“配置”部分是一个很好的起点.