【问题标题】:Symfony2 : render form as a stringSymfony2:将表单呈现为字符串
【发布时间】:2014-07-31 11:19:17
【问题描述】:

我正在尝试从 Symfony2 中的字符串呈现表单并在变量中获取结果。 我尝试了这个解决方案,Symfony 2 Twig form functions not available,但我收到一个错误(服务'twig.form.renderer'不可用)。所以我改变了 addExtension 部分(不确定类)。 这是我的代码:

$env = new \Twig_Environment(new \Twig_Loader_String());
$rendererEngine = new \Symfony\Bridge\Twig\Form\TwigRendererEngine();
$env->addExtension(new \Symfony\Bridge\Twig\Extension\FormExtension(new \Symfony\Bridge\Twig\Form\TwigRenderer($rendererEngine)));
$form = $this->createFormBuilder()->add('testField', 'text');
$form = $form->getForm()->createView();
return $env->render(
    '{{ form(form) }}',
    array('form' => $form)
);

现在我收到“致命错误:未捕获的异常 'Symfony\Component\Form\Exception\LogicException' 并带有消息 'No block "form" found while rendering the form”

【问题讨论】:

  • 是否必须使用字符串而不是仅包含 {{ form(form) }} 内容的模板?
  • 我也可以使用模板,但我想我会遇到同样的问题。
  • 好吧,我最终使用了一个更简单的方法,通过定义一个服务:twig.stringloader: class: Twig_Loader_String tags: - { name: twig.loader } 然后 echo $c->get ('twig')->render('{{ form(form) }}', array('form' => $form));
  • 比只使用带有表单块的模板更简单?

标签: forms symfony twig


【解决方案1】:

对于树枝模板,我使用以下代码:

$twig = $this->container->get('twig');
$twig->initRuntime();

return JsonResponse::create(array(
    'success' => false,
    'form' => $twig->getExtension('form')->renderer->searchAndRenderBlock($form->createView(), 'widget'),
));

对于php模板引擎:

$this->container->get('templating.helper.form')->widget($form->createView());

【讨论】:

  • 对于 symfony 3,它将是 getExtension('\Symfony\Bridge\Twig\Extension\FormExtension')
【解决方案2】:

您应该在定义 form 块的地方包含 form_div_layout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 2012-12-22
    • 2016-07-28
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多