3

在阅读了很多关于 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”部分(所以,第三个解决方案)

4

1 回答 1

0

如果您想以 Symfony 的方式进行操作,我建议您使用配置(如果我理解正确的话):

acme_foo:
    entities:
        FooEntity:
            class_type: Acme\FooBundle\Entity\Foo
            form_type: Acme\FooBundle\Form\Type\FooType
            template: AcmeFooBundle:Entity:foo.html.twig
        BarEntity:
            class_type: Acme\FooBundle\Entity\Bar
            form_type: Acme\FooBundle\Form\Type\BarType
            template: AcmeFooBundle:Entity:bar.html.twig

使用AcmeFooExtension该类,您可以设置包含配置的容器参数。然后,您可以将其注入您的服务(这是一个事件侦听器)。当/add/Foo被调用时,您可以调度一个acme_foo.entity_add由侦听器使用的事件。

您应该记住的是,您可以放入config.phpparameters.php文件中的所有内容都可以放入应用程序配置(config.yml)中。

于 2013-04-16T13:46:36.417 回答