Symfony overiding form fosuser omit getParent 给我错误

Symfony overiding form fosuser omit getParent gives me error

我正在阅读 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';
    }
}

Returns :

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

您可以使用setDefault函数:

  1. 添加use语句。

    use Symfony\Component\OptionsResolver\OptionsResolverInterface;

  2. 添加功能

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

首先要感谢@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