Forms Symfony2设置默认选项(选项ResolvePrinterface$resolver)

Forms Symfony2设置默认选项(选项ResolvePrinterface$resolver),forms,symfony,Forms,Symfony,我对Symfony2很陌生。我试图开发一个网站,有人可以注册/登录。因此,我试图创建注册表表单,但它始终认为setDefaultOptions(optionsResolvePrinterface$resolver)方法存在异常 RegisterType.php: <?php namespace MyappBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBu

我对Symfony2很陌生。我试图开发一个网站,有人可以注册/登录。因此,我试图创建注册表表单,但它始终认为setDefaultOptions(optionsResolvePrinterface$resolver)方法存在异常

RegisterType.php:

<?php

namespace MyappBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class RegisterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder
            ->add('name', TextType::class, array(
                    'label' => 'Your Name',
                    'label_attr' => array(
                        'attr' => array(
                            'class' => 'control-label'
                        )
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                ))
            ->add('email', EmailType::class, array(
                    'label' => 'Your Email',
                    'label_attr' => array(
                        'attr' => array(
                            'class' => 'control-label'
                        )
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                ))
            ->add('password',RepeatedType::class, array(
                    'type' => PasswordType::class, array(
                        'first_options'  => array(
                            'label' => 'Your Password', array(
                                'label_attr' => array(
                                    'attr' =>array(
                                        'class'=> 'control-label'
                                    )
                                )
                            ),
                            'attr' => array(
                                'class' => 'form-control'
                            )
                        ),
                        'second_options' => array(
                            'label' => 'Repeat Password', array(
                                'label_attr' => array(
                                    'attr' =>array(
                                        'class'=> 'control-label'
                                    )
                                )
                            ),
                            'attr' => array(
                                'class' => 'form-control'
                            )
                        )


                )))
            ->add('tel', NumberType::class, array(
                    'label' => 'Your Telephone number',
                    'label_attr' => array(
                        'attr' => array(
                            'class' => 'control-label'
                        )
                    ),
                    'attr' => array(
                        'class' => 'form-control'
                    )
                ))
            ->add('register', 'submit', array(
                    'attr' => array(
                        'class' => 'btn btn-default'
                    )
                ));
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(['data_class' => 'MyappBundle\Entity\Users']);
    }

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

有人能帮我吗?

我总是使用configureOptions方法将实体映射到表单。所以试试这个:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(
        array(
            'data_class' => 'MyappBundle\Entity\Users',
        )
    );
}

所以问题就解决了

删除RegisterType.php中的以下函数

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(
        array(
            'data_class' => 'MyappBundle\Entity\Users',
        )
    );
}
并修改RegisterControler.php,如下所示

$user = new User();

$form = $this->createForm(RegisterType::class,$user);

$form->handleRequest($request);
它解决了我提到的问题。
谢谢你的帮助

非常感谢您的回答,我按照您的建议做了,清除了prod和dev中的缓存,并得到了以下错误:CRITICAL-未捕获的PHP异常Symfony\Component\options resolver\Exception\undefinedoption异常:“选项“0”不存在。定义的选项有:“操作”、“第一个\u名称”、…、“必需”、“第二个\u名称”、“第二个\u选项”、”翻译域“,”修剪“,”类型“,”验证组“,”虚拟“,”位于……\vendor\symfony\symfony\src\symfony\Component\OptionsResolver\OptionsResolver.php第760行
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(
        array(
            'data_class' => 'MyappBundle\Entity\Users',
        )
    );
}
$user = new User();

$form = $this->createForm(RegisterType::class,$user);

$form->handleRequest($request);