Forms 将表单创建为服务(而不仅仅是类类型)的优势?

Forms 将表单创建为服务(而不仅仅是类类型)的优势?,forms,symfony,service,Forms,Symfony,Service,我到处都读到,你可以创建一个表单作为服务,但我真的不明白这样做的意义 有谁能给我一个简单的例子,说明这样做的好处,而不仅仅是将表单定义为类 没有代码(或不太多),只是一个简单类无法实现的表单服务的具体示例。 以下是我目前列出的优点(或不是): 依赖性注入(实际上无需声明为服务): 表单即服务将允许您向其中注入其他服务,并让它们成为构造函数。==>但实际上不需要将表单声明为服务:使用外部服务的formType(不定义为服务)的示例 用例1: 案例:您在多个地方使用表单,表单需要其他服务 解决方案

我到处都读到,你可以创建一个表单作为服务,但我真的不明白这样做的意义

有谁能给我一个简单的例子,说明这样做的好处,而不仅仅是将表单定义为类

没有代码(或不太多),只是一个简单类无法实现的表单服务的具体示例。


以下是我目前列出的优点(或不是):

依赖性注入(实际上无需声明为服务):
表单即服务将允许您向其中注入其他服务,并让它们成为构造函数。==>但实际上不需要将表单声明为服务:使用外部服务的formType(不定义为服务)的示例

  • 用例1:
  • 案例:您在多个地方使用表单,表单需要其他服务

    解决方案:通过将其声明为服务,您不必每次都记住类名,也不必访问容器来将服务传递给表单实例,因此,您可以:

    $this->createForm('Answer', null, array('service' => $service))
    
    您需要
    $this->createForm('Answer','my_form')

    并且您得到了正确配置的表单。当您更改表单时,以后不必在代码中的任何地方都更改它。当您不必每次都将所有内容传递给构造函数时,测试也更容易,忘记某些内容也更难

  • 用例2
  • 案例:将表单嵌入到其他表单中

    解决方案:您无权访问表单中的Dep.容器(您不应该这样做),因此不可能这样做

    $builder->add('Answer', new MyForm($service1,$service2))
    
    在表单内部,您可以这样做

     $builder->add('Answer', 'my_form')
    
  • 用例3
  • 案例:其他人使用您的代码,您的表单可能会在不同的案例中更改


    解决方案:如果您将表单声明为服务,您可以将其类设置为参数,因此,如果其他人想要扩展您的表单,他只需使用parameters.yml即可,而不会弄乱您的代码。有些示例可能是FOSUserBundle之类的bundle,您可以通过使用配置替换不同表单的用户类。

    Hi,如果您在多个上下文中重用表单,并且视图是有用的。例如,我创建了一个帮助表单,该表单在我存储在用户prev&actual Page中的所有页面上都是可用的,这有什么好处?表单作为一个类也可以在任何地方重用…我使用请求调用的服务构建表单,以便获得信息(上一页和实际页面)。我想你的问题是“我是否应该将表单声明为服务?”。我的回答是:“不,如果你不需要它”好的,那么我的问题是,你能给我一个我需要创建表单作为服务的例子吗?关于案例2,我的表单(我定义为别名为myform的服务的tagType)嵌入到另一个表单中。但是我的表单也是一个集合,你能告诉我应该写什么而不是$builder->add('tags','collection',array('type'=>new tagType())吗