Symfony2 Forms - 在控制器中获取可编辑元素

时间:2013-07-02 13:47:18

标签: php symfony symfony-forms

我正在尝试设置内联可编辑表单来编辑TaskType表单。我通过ajax发送请求,需要返回字段名称的json对象和渲染的html输入/ select / textarea。

但是,我看不到提取渲染的html的方法。或者,有没有办法将表单呈现给树枝中的json(虽然这看不对)?

我可以在JsonResponse中传回值和输入类型,并在JavaScript中渲染元素,但使用Symfony2表格渲染器是有意义的。

我希望返回这样的内容:

{ 
    title: "<input ... />",
    author: "<select ... ><option>...</option></select>"
    ...
}

任何帮助将不胜感激! :)

1 个答案:

答案 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。