在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';
}
}
如果有人可以给我一些建议会很好,谢谢。
答案 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'));