Symfony 2.4通过服务创建表单

时间:2014-02-12 06:03:01

标签: symfony

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

捕获致命错误:传递给Symfony \ Component \ Form \ Form :: Form :: __ construct()的参数1必须是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"]

RegistrationType为

//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';
    }
}

如果有人可以给我一些建议会很好,谢谢。

1 个答案:

答案 0 :(得分:4)

您的表单工厂服务定义错误。试着看看这个:http://symfony.com/doc/current/components/dependency_injection/factories.html

但是。你确定这是个好主意吗?请注意来自create的{​​{1}}方法需要另外两个参数:FormFactory$data。如果您按照自己的方式定义构建表单,则无法将这些参数传递给$options方法。

如果我是你,我会直接使用create服务。像这样:

form.factory

修改

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

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