【发布时间】: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 文件和图像。
bin、var、vendor 和 web 目录的用途很明显,但我想知道,为什么要分开 app、src 和 tests。
据我了解,src 包含构建应用程序的捆绑包。因此,我希望它们位于app 目录中。此外,tests 目录完全是个谜,因为它应该在捆绑包中 - src/AppBundle/Tests。另一方面,为什么模板(app/Resource/)在 AppBundle 之外?
我发现了一些关于在应用程序之间共享捆绑包的注释,但是由于我们有 Composer,因此此类捆绑包位于 vendor 目录中,并且它们具有单独的存储库。但是,我知道在应用程序中包含多个捆绑包而不需要额外的基础设施可能会很有用,但是 src 是完全误导性的名称。
那么,这个目录结构背后的动机是什么?还是只是历史遗产?
除非有充分的理由不这样做,否则我想我会删除重复的目录,例如 tests/AppBundle 和 app/Resources,因为它们也在 AppBundle 中。
【问题讨论】:
-
一些有趣的读物:stackoverflow.com/questions/23993295/…stackoverflow.com/questions/7625960/…symfony.com/doc/current/quick_tour/the_architecture.html。据我了解,
app用于配置,tests可以让 phpunit 从项目根目录运行,而无需显式指定配置文件的路径。 -
要运行 phpunit,我希望有一些统一的入口点,比如
bin/command tests:run,而不是依赖于任意工具的默认配置(如果我使用其他/更多的东西来运行测试呢?)。 -
我不知道如何回答您的问题...无论如何,还有 2 个关于目录架构的有趣主题:github.com/symfony/symfony/issues/12991 和 github.com/symfony/symfony-standard/issues/584:
app用于配置和模板,@ 987654356@ 获取 PHP 源代码。 -
就我个人而言,我会保留 src/AppBundle 并将应用程序的内容移至其中。 src 似乎更像是一个标准。 blog.nikolaposa.in.rs/2017/01/16/on-structuring-php-projects 目录结构从 S2 细化到 S3。看到 S4 的更多变化不会感到惊讶。
-
随意使用你想要的项目结构!但是,如果有人因为您没有使用标准而无法理解您所做的事情,请不要抱怨。 :)
标签: symfony