Symfony 2.4通过服务创建表单

Symfony 2.4通过服务创建表单,symfony,Symfony,在Symfony 2.4中,我想通过服务创建一个注册表。我使用了服务配置和表单组件工厂,但每次都出现以下异常: 可捕获的致命错误:传递给Symfony\Component\Form\Form::\uu构造必须是Symfony\Component\Form\FormConfigInterface的实例,给定的Bestxtech\UserBundle\Form\RegistrationType的实例 代码如下: services: bestxtech.form.type.registration:

在Symfony 2.4中,我想通过服务创建一个注册表。我使用了服务配置和表单组件工厂,但每次都出现以下异常:

可捕获的致命错误:传递给Symfony\Component\Form\Form::\uu构造必须是Symfony\Component\Form\FormConfigInterface的实例,给定的Bestxtech\UserBundle\Form\RegistrationType的实例

代码如下:

services:
bestxtech.form.type.registration:
    class: Bestxtech\UserBundle\Form\RegistrationType
    arguments: [null]
    tags:
    - { name: form.type, alias: registration }
    public: flase
bestxtech.form.registration:
    factory-method: create
    factory-service: form.factory
    class: Symfony\Component\Form\Form
    arguments: ["@bestxtech.form.type.registration"]
注册类型为

//Bestxtech\UserBundle\Form\RegistrationType
<?php
namespace Bestxtech\UserBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username')
            ->add('plainPassword', 'repeated', array(
            'type'            => 'password',
            'first_options'   => array('label' => 'Password'),
            'second_options'  => array('label' => 'Confirm password'),
            'invalid_message' => 'Password mismatch'
            ))
            ->add('email', 'email', array('label' => 'Email address'));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class'       => 'Bestxtech\UserBundle\Entity\User',
            'validation_groups' => array('Registration')
        ));
    }

    public function getName()
    {
        return 'user';
    }
}

如果有人能给我一些建议就好了,谢谢。

您的表单工厂服务定义是错误的。请尝试查看以下内容:

但是。你确定这是个好主意吗?请注意,从FormFactory创建方法需要另外两个参数:$data和$options。若您按照所示定义构建表单,那个么您将无法将这些参数传递给create方法

如果我是你,我会直接使用form.factory service。像这样:

$formFactory = $container->get('form.factory');
$form = $formFactory->create($container->get('form.type.registration'));
编辑:

问题是您使用了破折号而不是下划线,请尝试以下操作:

services:
    bestxtech.form.type.registration:
        class: Bestxtech\UserBundle\Form\RegistrationType
        arguments: [null]
        tags:
        - { name: form.type, alias: registration }
        public: flase
    bestxtech.form.registration:
        factory_method: create
        factory_service: form.factory
        class: Symfony\Component\Form\Form
        arguments: ["@bestxtech.form.type.registration"]

您的表单工厂服务定义错误。请尝试查看以下内容:

但是。你确定这是个好主意吗?请注意,从FormFactory创建方法需要另外两个参数:$data和$options。若您按照所示定义构建表单,那个么您将无法将这些参数传递给create方法

如果我是你,我会直接使用form.factory service。像这样:

$formFactory = $container->get('form.factory');
$form = $formFactory->create($container->get('form.type.registration'));
编辑:

问题是您使用了破折号而不是下划线,请尝试以下操作:

services:
    bestxtech.form.type.registration:
        class: Bestxtech\UserBundle\Form\RegistrationType
        arguments: [null]
        tags:
        - { name: form.type, alias: registration }
        public: flase
    bestxtech.form.registration:
        factory_method: create
        factory_service: form.factory
        class: Symfony\Component\Form\Form
        arguments: ["@bestxtech.form.type.registration"]

你能告诉我一个正确的服务定义吗。我尝试这样编辑:参数:bestxtech.form.type.registration.class:bestxtech\UserBundle\form\RegistrationType服务:bestxtech.form.registration:factory方法:创建工厂服务:form.factory类:Symfony\Component\form\form参数:[%bestxtech.form.type.registration.class%]但我仍然有以下例外:传递给Symfony\Component\Form\Form的参数1::\uu构造必须是Symfony\Component\Form\FormConfigInterface的实例,字符串提供了很多参数!现在出现了一个新的错误。我正在尝试修复它。你能给我一个正确的服务定义吗?我尝试这样编辑:参数:bestxtech.form.type.registration.class:Bestxtech\UserBundle\form\RegistrationType服务:Bestxtech.form.registration:factory方法:创建工厂服务:form.factory类:Symfony\Component\form\form参数:[%Bestxtech.form.type.registration.class%]但我仍然有以下例外:传递给Symfony\Component\Form\Form的参数1::\uu构造必须是Symfony\Component\Form\FormConfigInterface的实例,字符串给出了很多错误!现在出现了一个新错误。我正在尝试修复它。