在阅读了很多关于 Symfony2 DIC 和语义配置的信息后,我问自己:“那么,现在我要如何才能达到我想要达到的目标!?”
设想
想象一下,您想创建一个非常像“管理仪表板调度程序”的服务。
这意味着我有一些我想做 CRUD 的实体。我不想做的是我项目中每个实体的路由->动作->逻辑的组合;那是因为,以这种方式,我必须为每个对象编写如下内容:
- /添加/实体
- addEntityAction
- 实体逻辑
其中“实体”当然是对象中实体的名称。
我正在构建一个服务(如调度程序),它将响应操作(添加-删除-编辑)但它是参数化的:我将在地址栏上写入类似/add/entityA
或/add/entityB
的内容,并且路由将引导我执行相同的操作(当然)我是否记得我的服务与实体名称。
在这一点上,我的服务应该很聪明地知道什么是 EntityClass、FormTypeClass 和对象中实体的模板文件。
我的精神混乱来了
我必须做一些初步配置,比如下面的 php 数组(这只是一个例子)
array(
'EntityA'=>array(
'class'=>'BundleName/Entity/EntityA',
'form'=>'BundleName/Form/entityAType',
'template'=>'EntityATemplate'),
'EntityB'=>array(
'class'=>'BundleName/Entity/EntityB',
'form'=>'BundleName/Form/entityBType',
'template'=>'EntityBTemplate'),
[...]
);
或等效的东西。
但 ....
对于这种情况,考虑到只有我和我的团队会使用这个捆绑包(所以不是第三方捆绑包),最佳实践是什么?
第一个解决方案
parameters.php
如果我定义了一些常量或静态成员,请使用文件
第二种解决方案
直接在我的服务中使用地图(如以前的数组)
第三个解决方案
为我的包使用语义配置,定义扩展类等等
如果我不得不说实话,我不能说什么更好。显然第一个和第三个比第二个更好。
第一个解决方案打破了 symfony2 的理念,但似乎是唯一的方法,因为第二个解决方案似乎只有在我必须触发创建一些直接由我的 DIC 处理的服务(以级联方式)或具有配置层次结构时才有用,或者用于合并多个配置文件,或者(对于第三方捆绑包可能最重要)对配置进行某种验证。文件
你怎么看?您是否看到其他一些方法可以做到这一点,或者您只是更喜欢第三种解决方案?我想知道你的意见。
编辑:显然我可以使用构建器注入或设置器注入,但我认为它进入“DIC”部分(所以,第三个解决方案)