Symfony2文件夹结构,优先级和顺序

时间:2015-09-02 11:00:59

标签: php symfony structure organization

我来自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

将视图保持在捆绑包中,还是在全局'中保持这种观点是否明智? app文件夹?我还注意到捆绑内部正在进行配置(我怀疑它的层次结构比应用程序的全局'更高)。例如,捆绑AppBundle没有自己的视图和配置,这让我想知道首先在捆绑包内创建视图是否明智。

如果我能得到一个简单的答案,或者至少有一个关于它的资源可以解释所有这些背后的原因,那我就非常感谢。

1 个答案:

答案 0 :(得分:4)

总的来说,Bundle中的任何内容都可以被“全局”应用程序设置和资源覆盖。理解这一点的最有用资源可能是食谱条目How to Override any Part of a BundleHow to Use Bundle Inheritance to Override Parts of a Bundle

要回答关于是否在捆绑包或全局文件夹中保留视图的问题 - 这一切都取决于视图是否在捆绑包本身内有意义。如果要在多个包中使用某些内容(例如布局基础模板),那么在app文件夹中更有意义。

就你的捆绑结构而言 - 自从我开始使用Symfony以来,这已经发生了变化,所以我不是这方面的权威。现在的趋势似乎是,如果您可以将功能拆分为自包含的捆绑包,请执行此操作,否则在Symfony安装程序默认创建的AppBundle中弹出它。您可能需要查看Best Practices for Reusable Bundles以获取更多信息。

完全有可能有多个应用程序包,其中包含存储在包之外的实体和资源,例如

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

你是否这样做完全取决于你 - 你的代码,你的组织,除了一些特定的实例,作为框架的Symfony不会抱怨这一点。

对于在“层次结构”中比全局更高的捆绑配置 - 通常没有,但这与DI组件相关联。要了解这一点很多,但Cookbook“配置”部分是一个很好的起点。