【问题标题】:Symfony project structure - why src/ and app/?Symfony 项目结构 - 为什么是 src/ 和 app/?
【发布时间】:2017-01-20 10:36:32
【问题描述】:

根据 best practices 对于 Symfony 3 项目,应该有:

  • app/config/,存储为任何环境定义的所有配置;
  • app/Resources/,存储应用的所有模板和翻译文件;
  • src/AppBundle/,存储 Symfony 特定代码(控制器和路由)、您的域代码(例如 Doctrine 类)和所有业务逻辑;
  • var/ ...
  • tests/AppBundle/,存储应用的自动测试(例如单元测试)。
  • vendor/,这是 Composer 安装应用程序依赖项的目录,你不应该修改它的任何内容;
  • web/,存储所有前端控制器文件和所有网络资产,例如样式表、JavaScript 文件和图像。

binvarvendorweb 目录的用途很明显,但我想知道,为什么要分开 appsrctests

据我了解,src 包含构建应用程序的捆绑包。因此,我希望它们位于app 目录中。此外,tests 目录完全是个谜,因为它应该在捆绑包中 - src/AppBundle/Tests。另一方面,为什么模板(app/Resource/)在 AppBundle 之外?

我发现了一些关于在应用程序之间共享捆绑包的注释,但是由于我们有 Composer,因此此类捆绑包位于 vendor 目录中,并且它们具有单独的存储库。但是,我知道在应用程序中包含多个捆绑包而不需要额外的基础设施可能会很有用,但是 src 是完全误导性的名称。

那么,这个目录结构背后的动机是什么?还是只是历史遗产?

除非有充分的理由不这样做,否则我想我会删除重复的目录,例如 tests/AppBundleapp/Resources,因为它们也在 AppBundle 中。

【问题讨论】:

标签: symfony


【解决方案1】:

因此,感谢 cmets 中提供的链接,看起来 app/Resourcestests/ 目录只是历史遗产。由于 Symfony 中的所有内容都是一个包,因此这些目录也在 AppBundle 中,因此我可以删除重复项。 app/ 在这里只是为了引导 AppBundle 并包含不适合任何包的内容。

【讨论】:

  • 你也可以覆盖一些可重用的包元素,例如 fos 用户包的模板
【解决方案2】:

像bootstrap这样的Asset最好用web/

http://symfony.com/doc/master/best_practices/web-assets.html

将您的资产存储在 web/ 目录中。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 2011-02-12
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2017-04-15
    相关资源
    最近更新 更多