Forms Symfony form_错误(form)错误的字段名、错误或我的代码错误?

Forms Symfony form_错误(form)错误的字段名、错误或我的代码错误?,forms,validation,symfony,symfony-forms,Forms,Validation,Symfony,Symfony Forms,使用{%form\u errors(form)%}显示表单错误时出现问题显示的消息错误,字段颠倒。不知道这是错误还是我的错 无论如何,这是我的控制器操作的一部分,我正在创建一个不绑定到任何对象或实体的新表单类型: class MyController extends Controller { public function newAction(Request $request) { // NOTE not passing any data to createFor

使用
{%form\u errors(form)%}
显示表单错误时出现问题显示的消息错误,字段颠倒。不知道这是错误还是我的错

无论如何,这是我的控制器操作的一部分,我正在创建一个不绑定到任何对象或实体的新表单类型:

class MyController extends Controller
{
    public function newAction(Request $request)
    {
        // NOTE not passing any data to createForm method
        $context = $this->get('security.context');
        $form    = $this->createForm(new SendMailType($context));

        if('GET' == $request->getMethod()) // GET
            return array('form' => $form->createView());

        $form->bindRequest($request); // POST

        if(!$form->isValid()) return array('form' => $form->createView());

        return new Response('Form is valid');
    }
}
其中
SendMailType
有两个字段,
recipient
text
<代码>收件人不能为空

class SendMailType extends AbstractType
{

    /**
     * @var Symfony\Component\Security\Core\SecurityContext
     */
    protected $context;

    public function __construct(SecurityContext $context)
    {
        $this->context = $context;
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('recipient', 'text')
            ->add('text', 'textarea');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'validation_constraint' => new Collection(array(
                'recipient' => array(new NotBlank()),
            ))
        );
    }

    public function getName() { return 'send_mail'; }
}
POST上使用
{%form\u errors(form)%}
我得到了错误:

字段“文本”无效

如您所见,这是完全错误的,因为字段
文本
没有指定验证规则。另一方面,
收件人
字段本身显示正确的错误:

此值不应为空

class SendMailType extends AbstractType
{

    /**
     * @var Symfony\Component\Security\Core\SecurityContext
     */
    protected $context;

    public function __construct(SecurityContext $context)
    {
        $this->context = $context;
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('recipient', 'text')
            ->add('text', 'textarea');
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'validation_constraint' => new Collection(array(
                'recipient' => array(new NotBlank()),
            ))
        );
    }

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

有点惊讶它居然能起作用。无论如何,这将解决问题:

public function getDefaultOptions(array $options)
{
    return array(
        'validation_constraint' => new Collection(array(
            'allowExtraFields' => true,
            'fields' => array('recipient' => array(new NotBlank())),
        ))
    );
}

allowExtraFields
选项如何解释关于field
text
的奇怪消息?默认情况下,系统假设所有字段都将被验证。因此,投诉是“文本”没有有效性,因此必须是无效的。有点奇怪,但你来了。