Php 在Symfony 2中,我应该将泛型库代码放在哪里?
快速问题:我应该将与Benjamin Eberlei()在本篇博文中描述的控制器实用程序服务类具有类似特征的代码放在哪里 作为过渡,我将它放在:src/ProjectName/Library中 上下文 我注意到以下几点:Php 在Symfony 2中,我应该将泛型库代码放在哪里?,php,symfony,Php,Symfony,快速问题:我应该将与Benjamin Eberlei()在本篇博文中描述的控制器实用程序服务类具有类似特征的代码放在哪里 作为过渡,我将它放在:src/ProjectName/Library中 上下文 我注意到以下几点: 此逻辑不属于特定的捆绑包,事实上它适用于要创建的所有捆绑包 此逻辑通常属于特定于应用程序的库,而不是作为捆绑包的一部分,因为捆绑包中的控制器会扩展或使用此库代码 我找到了一些主题相似的问题的答案,但不完全是我想要的答案 仅根据我在这里的研究,这个问题似乎有点被踩死了,但我认
- 此逻辑不属于特定的捆绑包,事实上它适用于要创建的所有捆绑包
- 此逻辑通常属于特定于应用程序的库,而不是作为捆绑包的一部分,因为捆绑包中的控制器会扩展或使用此库代码
- 将这些类型的扩展放在一个捆绑包中-不适用,因为我正在开发的功能类型本质上是在扩展框架代码
- 为项目创建一个供应商目录,所有库代码都将存放在该项目中-如果这确实是最佳实践,那么这基本上意味着我必须通过composer中的私有repo使库可用,但这意味着我必须维护一个单独的代码库
- 创建一种存在于src/Company/SomeNamespace中的伪连接器包——我甚至不知道这是否可行,但如果它符合SF最佳实践,我将进一步研究
{
"repositories": [
{
"type": "package",
"package": {
"name": "my/package",
"version": "1.0.0",
"dist": {
"url": "https://github.com/my/package/archive/master.zip",
"type": "zip"
},
"autoload": {
"psr-0": {
"My\\Package\\": "src/"
}
}
}
}
],
"require": {
"my/package": "1.0.0"
}
}
如果您的软件包不支持PSR-0,那么您需要使用它,否则您的软件包将支持您需要使用的PSR-0。经过一番周折,虽然这里公认的答案是有价值的,但我决定创建一个“核心”包,它将容纳我的所有项目跨包/应用程序范围的依赖项和资源 这将允许我为所有资产、相关实体和特定于项目的库代码提供一个中心位置 定位于重构 我已经在内心与自己进行了推理,这是一个令人愉快的中间地带(也许是暂时的)解决方案,它允许我继续发展,而不是我目前所处的分析瘫痪状态 通过这种方式,我可以在以后重构到供应商目录解决方案中 如果您正在处理一个项目,并且对像我一样将实体和库代码分散在不同的包中这种有点不自然的感觉感到厌烦,那么这将是一个很好的解决方案 它不会改变SF2和原则2的默认行为 我之前对Symfony 2条令2配置进行了修改,允许我(正确地)将实体从捆绑包中移除,并将其放入一个单独的中心名称空间 我喜欢这个主意。我用了一会儿。这种方法需要注意的是,当您需要一个Bundle名称空间时,您不再能够在快速创建条令实体时使用命令行界面 我认为这很好,因为我需要改变周围的一切,但后来我想:
- “表单对象怎么样?我应该把它们放在哪里?放在它们自己的目录下的/src-like-Entity is下?”
- 服务层呢?(不是DI,而是实际的服务层——应用程序逻辑所在的层)
- 实体
- 一般形式
- 通用HTML、CSS和JavaScript资产
- 特定于项目的库代码
- 我的树枝也住在这里
- 最后,服务层类及其关联工厂也在这里
- 如果我有任何其他的扩展,我想使Symfony为这个项目,我会添加他们在这里
- 创建一个核心包
- 将泛型库代码放在这里
- 把所有实体放在这里
- 将通用资源(main.css、reset.css等)放在此处
- 把通用表格放在这里
- 将所有服务层类放在这里