我正面临着一个问题,我可以总结如下:我有一个像这样的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 %}
字符串
字段***name***、***surname***和***addresses***属于Symfony 2实体Person示例。***addresses***是地址集合的第一个也是唯一的元素(我需要这个集合是因为其他原因)
工作的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;
});
});
型
Entity文件:
class Person {
protected $name;
protected $surname;
protected $addresses;
public function __construct(){
$this->addresses = new ArrayCollection();
}
}
型
在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*/
}
型
实际上,我采取的方式是让每个FormType都有我不需要呈现的所有字段,但把'hidden'和'property_path' => false,因为我不能只呈现我想要的字段,因为其他字段会在运行时导致错误(它们是null),但我仍然会遇到问题,以联合的方式处理这两种情况。
把每个表单放在不同的页面(==不同的路由),使用不同的控制器,一切都很好,所以这不是一个与symfony基本使用相关的问题,而是N个表单在一个页面中与JQuery UI的集成让我哭了。
修正了我必须使用这个标签,我该如何解决?
1.我是否需要一个单独的Action来处理所有的事情?
1.我必须做一个单一的形式吗?
1.我错过什么了吗?
谢谢你提前,我希望我已经清楚地解释我的问题。
5条答案
按热度按时间cpjpxq1n1#
你只是对不同的表单使用了相同的变量
字符串
vnzz0bqm2#
尝试使用单一表单
字符串
然后,您在ocontroller
aaaAction()
中型
和表单生成器类,如
型
polhcujo3#
正如我之前提到的,我解决了在一个表单中 Package 所有选项卡的问题。你们的两个解决方案都很好,谢谢你们的时间。
利努沙蒂科
iszxjhcz4#
如果其他人也有这个问题,你可以像这样解决它(我不确定这是否是最优雅的解决方案,但我认为这比为所有内容制作一个大表单要好)。这个例子混合了profile和changePassword FOSUserBundle表单:
在你的主show模板中(在我的例子中,配置文件:show.html.twig):
字符串
重复更改密码:
型
在您的控制器中(添加else):
型
相应地添加profileForm和passwdForm。在我的例子中,修改的控制器是ProfileController和ChangePasswordControllers(FOSUserBundle重写)。
至于你的标签页,如果发现任何错误,你可以添加JavaScript(或twig)来打开标签页。
希望这对你有帮助:)
lo8azlld5#
我是这样做的:
字符串
在控制器中:
型