Symfony2在不同的JQuery UI选项卡中有多个表单,但是单页

lin*_*ico 5 javascript php jquery-ui symfony twig

我正面临一个问题,我可以总结如下:我有一个像这样的TWIG模板页面(reg.html.twig):

{% extends "::base.html.twig" %}
{% block body %}
<ul class="tabs">
    <li class="left"><a href="#tab1">tab1</a></li>
    <li class="left"><a href="#tab2">tab2</a></li>
    <li class="left"><a href="#tab3">tab3</a></li>
    <li class="right"><a href="#tab4">tab4</a></li>
</ul>
<div class="tabs_container">
    <div id="tab1" class="blocco-tab">
        <form action="{{ path('AAA') }}" method="post" {{ form_enctype(form) }}>
            <div id="name_field">
                {{ form_row(form.name) }}
            </div><!-- /name_field -->
            <div id="address">
                 {{ form_row(form.addresses[0].road) }}
            </div><!-- /address_field -->
        </form>
    </div>
    <div id="tab2" class="blocco-tab">
        <form action="{{ path('BBB') }}" method="post" {{ form_enctype(form) }}>
            <div id="surname_field">
                {{ form_row(form.surname) }}
            </div><!-- /surname_field -->
        </form>
    </div>
</div> <!-- contenitore_tabs -->
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

字段名称,姓氏地址属于示例Symfony2实体Person. 地址是地址集合中的第一个也是唯一一个元素(由于其他原因,我需要将其作为集合)

工作的JS文件是:

jQuery(document).ready(function() {
    $(".blocco-tab").hide();
    $("ul.tabs li:first").addClass("active").show();
    $(".blocco-tab:first").show();
    $("ul.tabs li").click(function() {
        $("ul.tabs li").removeClass("active");
        $(this).addClass("active");
        $(".blocco-tab").hide();
        var activeTab = $(this).find("a").attr("href");
        $(activeTab).fadeIn();
        return false;
    });
});
Run Code Online (Sandbox Code Playgroud)

实体文件:

class Person {
    protected $name;
    protected $surname;
    protected $addresses;

    public function __construct(){
        $this->addresses = new ArrayCollection();
    }
}
Run Code Online (Sandbox Code Playgroud)

并在DefaultController中:

public function tab1Action(Request $request){
    $person = new Person();
    $address = new Address();
    $addr_coll = new ArrayCollection();
    $addr_coll->add($address);
    $tab1_type = new Tab1Type();
    $person->setAddresses($addr_coll);
    $form = $this->createForm($tab1_type, $person);
    if ($request->getMethod() == 'POST')
    {
        $form->bindRequest($request);
        if ($form->isValid())
    /*ecc ecc ecc*/
}

public function tab2Action(Request $request){
    $person = new Person();
    $tab2_type = new Tab2Type();
    $form = $this->createForm($tab2_type, $person);
    if ($request->getMethod() == 'POST')
    {
        $form->bindRequest($request);
        if ($form->isValid())
    /*ecc ecc ecc*/
}
Run Code Online (Sandbox Code Playgroud)

实际上我采取的方式是让每个FormType都包含我不需要渲染的所有字段,但是把'hidden'和'property_path'=> false,因为我不能只渲染我想要的字段而导致其他字段会导致错误运行时(它们是空的),但我仍然遇到以联合方式处理这两种情况的问题.

将每个表单放在不同的页面(==不同的Route)中,使用不同的控制器,一切正常,所以这不是与symfony的基本使用相关的问题,它是将N个表单与JQuery UI集成在一个页面中,这使得我哭.

修复了我必须使用此标签,我该如何解决?

  1. 我是否必须制作一个Action来处理所有事情?
  2. 我必须制作一张表格吗?
  3. 我错过了什么吗?

在此先感谢,我希望我已经清楚地解释了我的问题.

lin*_*ico 0

正如我之前提到的,我解决了将所有选项卡包装在一个表单中的问题。您的两个解决方案都可以,谢谢您的宝贵时间。

Linuxatico