Symfony2在同一页面提交多个表单

时间:2014-12-03 12:07:57

标签: php forms symfony

我尝试在同一页面中创建一个简单的登录注册表。一个表格用于登记一个登记表格。我正在使用symfony(2.6)

我设法在我想要的页面中呈现2个表单,但是如果我尝试提交注册表单,它会给我一个消息,即另一个表单不能是emty。

在我尝试合并页面之前,我的注册工作没有任何问题我的登录没有(只是创建了表单)我的代码:

AccountController.php呈现给模板的文件。表单创建已在RegistrationType.php和LoginType.php

中实现
    <?php
namespace Spyros\MapBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Spyros\MapBundle\Form\Type\RegistrationType;
use Spyros\MapBundle\Form\Type\LoginType;
use Spyros\MapBundle\Form\Model\Registration;
use Spyros\MapBundle\Form\Model\Login;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;


class AccountController extends Controller
{
    public function registerAction()
    {
        $registration = new Registration();
        $form1 = $this->createForm(new RegistrationType(), $registration, array(
            'action' => $this->generateUrl('account_create'),
        ));

        $login = new Login();
        $form2 = $this->createForm(new LoginType(), $login, array(
            'action' => $this->generateUrl('account_create'),
        ));

        return $this->render(
            'SpyrosMapBundle:Account:register.html.twig',
            array('form1' => $form1->createView(),
                  'form2' => $form2->createView())
        );


    }







    public function createAction(Request $request)
    {   


                                $em = $this->getDoctrine()->getManager();

                                $form1 = $this->createForm(new RegistrationType(), new Registration());

                                $form1>handleRequest($request);

                                if ($form1->isValid()) {
                                    $registration = $form1->getData();

                                    $em->persist($registration->getUser());
                                    $em->flush();

                                          echo "<p>hi</p>";
                                }
     return $this->render(
            'SpyrosMapBundle:Account:register.html.twig',
            array('form1' => $form1->createView())
        );  



     }

    }

register.html.twig

{% extends 'SpyrosMapBundle::rightform.html.twig' %}
{% form_theme form1 'bootstrap_3_layout.html.twig' %}
{% form_theme form2 'bootstrap_3_layout.html.twig' %}
{% block body %}
<body>
<section class="container">

    <section class="row">

        <section class="col col-lg-9">
        {{ form_start(form2 , {'attr': {'class': 'form-inline'}} )}}
        {{ form_row(form2.user.email)}}
        {{ form_row(form2.user.plainPassword)}}
        <div id="inline">
        {{ form_row(form2.Login) }}

        </div>
        </section>

        <section class="col col-lg-3">

        {{ form(form1) }}

        </section>

    </section>


</section>

</body>

{% endblock %}

我的观看页面:

my view page

如何在没有表格2的情况下提交我的注册表格(form1)给我一条填写其字段的信息。

1 个答案:

答案 0 :(得分:3)

我假设您的浏览器抱怨空白字段?关于Symfony 2表单的一个不那么有趣的事情是,默认情况下,所有字段都是必需的。这是通过在input元素本身上设置required属性来实现的。然后浏览器处理该属性。

有很多方法可以解决这个问题。创建元素时设置required = false:

     $builder->add('name','text', array(
        'required' => false,  /***** Make it optional *****/
        'label'    => 'Your Name',
        'trim'     => true,
        'constraints' => array(
            new NotBlankConstraint($constraintOptions),
        ),
        'attr' => array('size' => 30),
    ));

您还可以在创建表单时将其传递给表单选项,以便默认情况下一切都是可选的。

您还可以在树枝模板中向表单元素本身添加一个简单的novalidate属性。

顺便说一句,正如@Spiro建议的那样,如果您使用的是内置安全系统,那么您需要将每个表单提交到不同的URL。否则,安全系统将拦截您的创建用户请求。

http://symfony.com/doc/current/reference/forms/types/form.html#required