Php 自Symfony 3.0以来注册简单表单类型服务
,Symfony引入了对完全限定类名的替代支持,以生成表单,因为3.0版是强制性的 很久以前,有一种习惯是注册表单类型,即使它们没有依赖项。假设您是一个没有依赖项的简单表单类型:Php 自Symfony 3.0以来注册简单表单类型服务,php,symfony,symfony-forms,Php,Symfony,Symfony Forms,,Symfony引入了对完全限定类名的替代支持,以生成表单,因为3.0版是强制性的 很久以前,有一种习惯是注册表单类型,即使它们没有依赖项。假设您是一个没有依赖项的简单表单类型: class FoobarType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add
class FoobarType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('foo', NumberType::class)
->add('bar', TextType::class)
;
}
}
我们尝试在某个地方使用它:
$form = $this->createFormBuilder()
->add('foobar1', FoobarType::class)
->add('foobar2', FoobarType::class)
->add('foobar3', FoobarType::class)
->add('submit', SubmitType::class)
->getForm();
一切都很好!如果我们有服务:
services:
app.form.type.foobar:
class: AppBundle\Form\Type\FoobarType
tags:
- { name: form.type }
由于我们使用了form.type
标记,因此将使用我们的服务,而不是创建新的FoobarType
()。我试图改变这种情况,但表单类型只解决了一次/实例化了一次,服务也起了作用
因此,我的问题是:
- 未注册表单类型的使用存在一些众所周知的问题?
- 那么,我们可以说可以使用表单类型,而无需将其注册为
service?form.type
请注意,我说的是简单表单类型(无依赖项)在理解问题时遇到困难。除非您希望注入依赖项,否则不需要将表单类型注册为服务。S3方法的缺点是,您不能再使用同一表单类型类创建多个服务,也不能在运行时使用服务“重写”表单类型。它完全依赖于类名。@Cerad我看到一些注释(来自Symfony Core)表达了始终注册表单类型所必需的内容,不幸的是我找不到注释,但这引起了怀疑。手册通常是查找此类内容的好地方。注册表单类型不是强制性的。正如@Cerad所指出的,只有当您具有依赖关系时才有必要这样做