在Symfony 2中的两个不同页面(URL)上使用相同的表单

时间:2015-03-01 18:36:02

标签: forms symfony twig fosuserbundle

我正在使用带有Symfony 2.5的FOSUserBundle。 我已覆盖默认注册表单并为其定义了新的URL。

fos_user_registration_register:
    path:      /user/new.html
    defaults:  { _controller: FOSUserBundle:Registration:register }

这是表格

class RegistrationFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->remove('plainPassword');
        $builder->remove('username');
        $builder->remove("email");

        $builder->add('terms', 'checkbox', array('required'  => true, 
                                                 'mapped' => false, 
                                                 'constraints' => new True(array('message' => 'Required!'))));

        $builder->add("email", "email", array("required" => true, "mapped" => true, "constraints" => new MailBlacklist()));
    }

    public function getParent()
    {
        return 'fos_user_registration';
    }

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

最后我将其注册为服务。

当我在URL /user/new.html上显示表单并提交时,它可以正常工作:显示验证错误,如果数据一切正常,则会创建用户。

但是当我在不同的URL(根)上显示完全相同的表单并提交表单时,不会进行验证并且不会保存用户。相反,我被重定向到/user/new.html并看到一个空表格。

我创建了这样的表单

$form = $this->createForm('my_user_registration')->createView();  

为什么这不起作用? FOSUserBundle是否会检查引用者?

我的模板

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST">
        {{ form_widget(form) }}
        <div>
            <input type="submit" value="Registrieren" />
        </div>
</form>

如果有人可以帮助解决这个“小问题”,那会很棒。)

1 个答案:

答案 0 :(得分:0)

问题是我的表格的名称。如果我使用FOSUserBundle表单工厂而不是createForm(),它可以工作,名称是正确的