创建表单作为服务(而不仅仅是类类型)的优势?
Advantage of creating a form as a service (rather than just a classType)?
我在这里和那里读到过,您可以创建一个表单作为 service.But 我真的不明白这样做的意义。
任何人都可以给我一个简单的例子来说明这样做的好处,而不仅仅是将表单定义为 class。
没有代码(或代码不多),只是一个快速具体的例子,说明我将使用表单即服务做什么,如果它是一个简单的 class,我将无法做到。
这是我目前列出的(或没有)优势:
依赖注入(其实不需要声明为服务):
表单即服务将允许您将其他服务注入其中并让它们成为构造函数。 ==> 但实际上不需要将表单声明为服务:here 使用外部服务的 formType(未定义为服务)的示例。
- 用例 1:
案例:您在多个地方使用您的表单,您的表单需要一些其他服务
解决方案:通过声明为服务,不需要每次都记住class名字,也不需要访问容器来传递为您的表单实例提供服务,而不是:
$this->createForm('Answer', null, array('service' => $service))
你会$this->createForm('Answer', 'my_form')
您将获得正确配置的表单。当您更改表单时,您以后不必在代码中的任何地方更改它。当您不必每次都将所有内容都传递给构造函数时,它也更容易测试并且更难忘记一些东西。
- 用例 2
案例:您将您的表单嵌入到其他表单中
解决方案:您无权访问您表单中的 Dep.Container(您不应该有),因此无法做到
$builder->add('Answer', new MyForm($service1,$service2))
内部表格,而不是你
$builder->add('Answer', 'my_form')
- 用例 3
案例:别人用你的代码,你的form可能会根据不同的case而改变
解决方案:如果您将表单声明为服务,则可以将其 class 设置为参数,以防其他人想要扩展您的表单,他只需使用 parameters.yml 即可完成,而不会弄乱您的代码。一些例子可能是像 FOSUserBundle 这样的包,当你可以通过配置替换不同形式的用户 class。
我在这里和那里读到过,您可以创建一个表单作为 service.But 我真的不明白这样做的意义。
任何人都可以给我一个简单的例子来说明这样做的好处,而不仅仅是将表单定义为 class。
没有代码(或代码不多),只是一个快速具体的例子,说明我将使用表单即服务做什么,如果它是一个简单的 class,我将无法做到。
这是我目前列出的(或没有)优势:
依赖注入(其实不需要声明为服务):
表单即服务将允许您将其他服务注入其中并让它们成为构造函数。 ==> 但实际上不需要将表单声明为服务:here 使用外部服务的 formType(未定义为服务)的示例。
- 用例 1:
案例:您在多个地方使用您的表单,您的表单需要一些其他服务
解决方案:通过声明为服务,不需要每次都记住class名字,也不需要访问容器来传递为您的表单实例提供服务,而不是:
$this->createForm('Answer', null, array('service' => $service))
你会$this->createForm('Answer', 'my_form')
您将获得正确配置的表单。当您更改表单时,您以后不必在代码中的任何地方更改它。当您不必每次都将所有内容都传递给构造函数时,它也更容易测试并且更难忘记一些东西。
- 用例 2
案例:您将您的表单嵌入到其他表单中
解决方案:您无权访问您表单中的 Dep.Container(您不应该有),因此无法做到
$builder->add('Answer', new MyForm($service1,$service2))
内部表格,而不是你
$builder->add('Answer', 'my_form')
- 用例 3
案例:别人用你的代码,你的form可能会根据不同的case而改变
解决方案:如果您将表单声明为服务,则可以将其 class 设置为参数,以防其他人想要扩展您的表单,他只需使用 parameters.yml 即可完成,而不会弄乱您的代码。一些例子可能是像 FOSUserBundle 这样的包,当你可以通过配置替换不同形式的用户 class。