我正在尝试设置内联可编辑表单来编辑TaskType表单。我通过ajax发送请求,需要返回字段名称的json对象和渲染的html输入/ select / textarea。
但是,我看不到提取渲染的html的方法。或者,有没有办法将表单呈现给树枝中的json(虽然这看不对)?
我可以在JsonResponse
中传回值和输入类型,并在JavaScript中渲染元素,但使用Symfony2表格渲染器是有意义的。
我希望返回这样的内容:
{
title: "<input ... />",
author: "<select ... ><option>...</option></select>"
...
}
任何帮助将不胜感激! :)
答案 0 :(得分:0)
Twig拥有每种类型字段的定义,因此我强烈建议使用Twig的渲染功能。
您可以这样做:
$formView = $this->createForm(new FormClass(), $entity)->createView(); // your form view
$json = array(); // initialize json array
foreach ($formView as $fieldKey => $field) {
$json['html'][$key] = $this->container
->get('templating')
->render('formField.html.twig', array('field' => $field));
}
$json['message'] = 'Success!'; // send a success or failure message
// encode the array above into json and return it
模板可以调用 {{form_widget(field)}} 或 {{form_row(field)}} (包含标签和错误消息)。
不确定这是否会表现良好所以最好多次调用渲染函数。
下面的替代方案:
$formView = $this->createForm(new FormClass(), $entity)->createView(); // your form view
// parameters for the template
$params = array(
'form' => $formView
);
// render the form once
$renderedForm = $this->container
->get('templating')
->render('form.html.twig', $params);
$json = array(
'message' => 'Success!' // send a success or failure message,
'html' => $renderedForm,
);
// encode the array above into json and return it
Symfony有关于how to customize form rendering的文档。通过本文档,您将了解为什么需要通过Twig。