经过一番折腾,虽然这里接受的答案有其优点,但我决定创建一个“核心”包,它将容纳我所有的项目跨包/应用程序范围的依赖项和资源。
这将使我能够为所有资产、相关实体和项目特定的库代码提供一个中心位置。
定位于重构
我在内部对自己进行了推理,这是一个快乐的中间地带(也许是暂时的)解决方案,它使我能够继续发展,而不是我目前所处的分析瘫痪状态。
以这种方式做事,我可以让弹性点稍后重构到供应商目录解决方案。
如果您正在从事一个项目,并且对像我一样将实体和库代码分散在不同的包中的感觉有些不自然而感到厌烦,这将是一个很好的解决方案。
它不会改变 SF2 和 Doctrine 2 的默认行为
我之前实现了对 Symfony 2 Doctrine 2 配置的修改,它允许我(正确地)从包中删除实体并进入一个单独的中央命名空间。
我喜欢这个主意。我用了一段时间。这种方法需要注意的是,当您需要快速创建 Doctrine 实体时,您不再能够使用命令行界面,因为需要捆绑命名空间。
我认为这很好,因为无论如何我都需要改变一些事情,但后来我想:
- “Form 对象怎么样?我应该把它们放在哪里?在 /src 下他们自己的目录中,就像 Entity 一样?
- 服务层呢?(不是 DI,而是实际的服务层——应用程序逻辑所在的位置)”
在写另一个“我在 Symfony 2 中哪里可以放 XXXX”类型的问题(我敢肯定那些关注 PHP 和 Symfony2 标签的人已经厌倦了),我已经停下来把它放在我已经称为资产包,并将其重命名为核心包。
Core Bundle
这样,它按照 CLI 的要求在一个 bundle 中,它更容易遵循,我可以在语义上共享这个 bundle 的内容,因为它包含特定于应用程序的核心代码:
- 实体。
- 通用表格。
- 通用 HTML、CSS 和 JavaScript 资产。
- 项目特定的库代码。
- 我的 Twig 扩展也住在这里。
- 最后,服务层类和它们相关的工厂也在这里。
- 如果我想为这个项目对 Symfony 进行任何其他扩展,我将在此处添加它们。
最重要的是,当我有时间真正坐下来与 composer 等人一起工作时,我可以轻松地将其重构出来,因为它们都存在于一个地方。
所以。简而言之。回答我自己的问题:在 Symfony 2 中我应该把通用库代码放在哪里?
我将它放在一个专门为存储资产、资源和库代码而创建的包中,使用以下建议需要多个包可以访问这些包:
- 创建一个核心包。
- 将通用库代码放在这里。
- 将所有实体放在这里。
- 将通用资产(main.css、reset.css 等)放在这里。
- 把通用表格放在这里。
- 将所有服务层类放在这里。
通过 composer 打包安装
当您开始使用composer时,请研究如何将文件结构格式化为符合PSR-0:
- 将其格式化为符合 PSR-0 标准
- 将其打包成一个 zip 文件并通过 composer 安装(根据@Thomas Potaires 编辑的说明)
应用程序/项目- 构建应用程序但依赖于核心包的包。
Core Bundle - 在关键点扩展 SF2,包含共享资源和库代码。因为我没有改变框架的工作方式,所以文件是 SF2 所期望的。这意味着我仍然可以使用它的实体生成器。
我不会对这里生成的脚手架/CRUD 屏幕有任何问题,因为它们将被视为原型,而不是真正的应用程序功能。
SF2 层。- 保持不变,不变。扩展。