Php 自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

,Symfony引入了对完全限定类名的替代支持,以生成表单,因为3.0版是强制性的

很久以前,有一种习惯是注册表单类型,即使它们没有依赖项。假设您是一个没有依赖项的简单表单类型

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
()。我试图改变这种情况,但表单类型只解决了一次/实例化了一次,服务也起了作用

因此,我的问题是:

  • 未注册表单类型的使用存在一些众所周知的问题?
  • 那么,我们可以说可以使用表单类型,而无需将其注册为
    form.type
    service?

请注意,我说的是简单表单类型(无依赖项)

在理解问题时遇到困难。除非您希望注入依赖项,否则不需要将表单类型注册为服务。S3方法的缺点是,您不能再使用同一表单类型类创建多个服务,也不能在运行时使用服务“重写”表单类型。它完全依赖于类名。@Cerad我看到一些注释(来自Symfony Core)表达了始终注册表单类型所必需的内容,不幸的是我找不到注释,但这引起了怀疑。手册通常是查找此类内容的好地方。注册表单类型不是强制性的。正如@Cerad所指出的,只有当您具有依赖关系时才有必要这样做