Symfony覆盖表格fos用户省略getParent给我错误

时间:2015-03-16 13:49:16

标签: forms symfony registration fosuserbundle

我只是阅读FOSuserbundle重写表单。它说:

如果您不想重复使用FOSUserBundle中添加的字段,则可以省略getParent方法并自行配置所有字段。

当我这样做时,它给了我错误。

任何帮助都会非常感激。

我的简单代码

namespace CTC\Bundle\UserBundle\Form\Type;

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

class RegistrationFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // add form fields
        $builder->add('userCivility',null, array('label' => 'Title'));
        $builder->add('userFirstName');
    }

    // If you don't want to reuse the fields added in FOSUserBundle by default,
    // you can omit the getParent method and configure all fields yourself.
    // public function getParent()
    //{
    //    return 'fos_user_registration';
    //}

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

退货:

表单的视图数据应该是标量,数组或\ ArrayAccess的实例,但是类CTC \ Bundle \ UserBundle \ Entity \ User的实例。您可以通过设置" data_class"来避免此错误。 " CTC \ Bundle \ UserBundle \ Entity \ User"的选项或者添加一个视图转换器,将类CTC \ Bundle \ UserBundle \ Entity \ User的实例转换为标量,数组或\ ArrayAccess的实例。

2 个答案:

答案 0 :(得分:2)

您可以使用setDefault功能:

  1. 添加使用声明。

    use Symfony\Component\OptionsResolver\OptionsResolverInterface;

  2. 添加功能

    public function setDefaultOptions( OptionsResolverInterface $resolver )
    {
        $resolver->setDefaults( array(
            'data_class' => 'YamilovS\MyESchoolBundle\Entity\User',
            'intention'  => 'registration',
        ));
    }
    

答案 1 :(得分:0)

我想先感谢@Sheepy和@Stephan,因为你帮我找到了解决方案。

只需发布symfony 3的更新:

/**
 * {@inheritdoc}
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'BourgMapper\TubBundle\Entity\User',
        'csrf_token_id' => 'registration',
        // BC for SF < 2.8
        'intention' => 'registration',
    ));
}

享受:D

Source