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

Symfony2 folder structure, priorities and order

我来自 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,现在。我已经阅读了一些文档并阅读了一两个教程,none 其中回答了我一直问自己的这个问题。

根据我的理解,捆绑包是我可以在当前项目以及我制作的其他项目中使用的 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

将视图保存在捆绑包中或 'global' 应用程序文件夹中是否明智?我还注意到配置是在包内进行的(我怀疑它的层次结构比应用程序 'global' 更高)。例如,bundle AppBundle 没有自己的视图和配置,这让我怀疑首先在 bundle 中创建视图是否明智。

如果我能得到一个简单的答案,或者至少是一个可以解释这一切背后原因的资源,我会非常感激不尽。

总的来说,Bundle 中的任何内容都可以被 "global" 应用程序设置和资源覆盖。可能对理解这一点最有用的资源是食谱条目 How to Override any Part of a Bundle and How 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 作为一个框架不会抱怨这个。

至于 "hierarchy" 中的捆绑包配置高于全局 - 通常不会,尽管这与 DI 组件相关。很多事情都需要你动脑筋,但 Cookbook "Configuration" 部分是一个很好的起点。