【问题标题】:Symfony2- submit button causes 'extra fields' errorSymfony2-提交按钮导致“额外字段”错误
【发布时间】:2014-04-20 09:04:09
【问题描述】:

我有一个简单的表格:

class SignInType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('_username', 'text');
        $builder->add('_password', 'password');
        $builder->add('Sign in', 'submit');
    }

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

我在“登录”操作中调用:

public function signInAction()
{
    $form = $this->createForm(new SignInType(), null,
        [ 'action' => $this->generateUrl('my_project_account_sign_in_process') ]
    );

但是绑定 POST 请求会导致表单无效,错误为This form should not contain extra fields。这似乎是导致问题的提交按钮 - 我该如何解决这个问题?

public function signInProcessAction(Request $request)
{
    $doctrineManager = $this->getDoctrine()->getManager();

    $form = $this->createForm(new SignInType());

    $form->handleRequest($request);
    ...

【问题讨论】:

  • 请提供您用来展示表格的树枝。 createAction 的含义是什么?
  • @Healkiss 我的 Twig 视图只包含 {{ form(form) }}。抱歉,createAction 是我转换示例时的拼写错误 - 现在已修复。
  • $this->createForm(new SignUpType(), new SignUp()) 是另一个拼写错误吗?因为我们不能确定 SignUpType === SignInType.
  • 好的,一些评论:为什么你的 SignInType 没有名字?您在哪里修改表单的操作?我从来没有见过你这样做的“方式”。
  • 首先,在你的类型$builder->setAction($this->generateUrl('my_project_account_sign_in_process'))或者你的twig中添加{{ form(form, {'action': path('my_project_account_sign_in_process'), 'method': 'POST'}) }}的动作设置你的表单提交后你确定在你的signInProcessAction吗?

标签: php symfony


【解决方案1】:

我已通过删除按钮名称中的空格来解决此问题:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    ...
    $builder->add('Sign_in', 'submit');
}

【讨论】:

    【解决方案2】:

    那么错误This form should not contain extra fields肯定是由没有名字的表单引起的。 Symfony 无法获取表单字段并尝试获取一些随机的其他元素?

    【讨论】:

    • 设置名称没有区别。该错误明确表示它是无关的提交按钮(“登录”),因此是问题。
    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2014-03-27
    • 2016-05-18
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多