Php Symfony2复杂表单的最佳实践
我的Symfony2应用程序中有一个复杂的数据库模式,有许多实体相互链接 因此,我的形式也很复杂:我可以有许多链接形式;例如,“电影院”可以有一个地址,但也可以链接到多个“电影”(带有添加新电影的按钮) 使用基本的Symfony2表单类型很难处理这个问题我更喜欢在细枝视图中手动创建自己的表单;使用一堆Javascript 但我不知道如何处理表格提交Php Symfony2复杂表单的最佳实践,php,forms,symfony,handle,Php,Forms,Symfony,Handle,我的Symfony2应用程序中有一个复杂的数据库模式,有许多实体相互链接 因此,我的形式也很复杂:我可以有许多链接形式;例如,“电影院”可以有一个地址,但也可以链接到多个“电影”(带有添加新电影的按钮) 使用基本的Symfony2表单类型很难处理这个问题我更喜欢在细枝视图中手动创建自己的表单;使用一堆Javascript 但我不知道如何处理表格提交 我是否应该定义一个CinemaType并仅用于处理表单请求(而不是用于创建表单视图) 我是否应该在控制器中使用createFormBuilder(
- 我是否应该定义一个CinemaType并仅用于处理表单请求(而不是用于创建表单视图)
- 我是否应该在控制器中使用
来定义基本表单字段,并使用createFormBuilder()
方法检查它们handleRequest()
- 或者,最后,是否应该获取所有我的帖子数据并手动检查它们
谢谢:)您始终可以创建自己的简单表单类,该类实现与Symfony2相同的方法:
- HandlerRequest
- 证实
- createView
等等。我不太明白这个问题
您可以使用多个嵌套表单,整个结构(html+js)都在文档中: 官方文件也给出了一个警告: 只是答案验证的摘录:
function addTagForm($collectionHolder, $newLinkLi) {
// Get the data-prototype explained earlier
var prototype = $collectionHolder.data('prototype');
// get the new index
var index = $collectionHolder.data('index');
// Replace '$$name$$' in the prototype's HTML to
// instead be a number based on how many items we have
var newForm = prototype.replace(/__name__/g, index);
// increase the index with one for the next item
$collectionHolder.data('index', index + 1);
// Display the form in the page in an li, before the "Add a tag" link li
var $newFormLi = $('<li></li>').append(newForm);
// also add a remove button, just for this example
$newFormLi.append('<a href="#" class="remove-tag">x</a>');
$newLinkLi.before($newFormLi);
// handle the removal, just for this example
$('.remove-tag').click(function(e) {
e.preventDefault();
$(this).parent().remove();
return false;
});
}
函数addTagForm($collectionHolder,$newLinkLi){
//获取前面解释的数据原型
var prototype=$collectionHolder.data('prototype');
//获取新索引
var索引=$collectionHolder.data('index');
//将原型HTML中的“$$name$$”替换为
//取而代之的是一个基于我们拥有多少物品的数字
var newForm=prototype.replace(/\uuuuu name\uuuuu/g,索引);
//为下一项增加索引1
$collectionHolder.data('index',index+1);
//在“添加标签”链接li之前,在页面中的一个li中显示表单
变量$newFormLi=$('')。追加(newForm);
//还添加了一个删除按钮,仅用于本例
$newFormLi.追加(“”);
$newLinkLi.before($newFormLi);
//处理删除操作,仅此示例
$('.remove tag')。单击(函数(e){
e、 预防默认值();
$(this.parent().remove();
返回false;
});
}
您可以自定义渲染,或/和创建自己的主题:
您可以处理表单验证:
如果你擅长人体工程学,你可以创建漂亮的表格,分为多个标签页或任何其他可思考的设计…难道不是
bind
放弃了handleRequest
?在新版本(2.7和2.8分支)中,我再也看不到bind
。没错,我在看一个旧项目。你看过表单集合吗。在你的问题描述中没有看到任何看起来困难的东西。我同意细枝会碍事。我实现了自己的form twig扩展,以更好地控制html输出。但是表单在聚合根对象和html表单元素之间的映射方面做得很好。