【发布时间】:2017-08-23 15:20:00
【问题描述】:
我最近清理了我的 Twig 模板以避免在 Symfony 2.8 上被弃用的调用,我得到了一个奇怪的行为。
这就是我的模板的样子:
{{ form_start(form, {'attr': {'class': 'form_template'} }) }}
{{ form_widget(form) }}
<input type="submit" value="Send"/>
{{ form_end(form) }}
这就是我的表单的样子:
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email', 'text', array('label' => 'your email'));
}
public function getName()
{
return 'some_fancy_name';
}
}
这就是我的控制器的样子
public function someAction(Request $request)
{
$form = $this->createForm(new MyFormType(), null);
if ($request->getMethod() == 'POST')
{
// do something with the form contents
return $this->redirect($this->generateUrl('somewhere'));
}
return $this->render('::myform.html.twig', array(
'form' => $form->createView(),
));
}
渲染模板时,一切正常,直到 Twig 渲染 form_end() 函数然后抛出 Error: Maximum function nesting level of '100' reached, aborting! (500 Internal Server Error)
我尝试在我的 PHP 配置中增加 xdebug.max_nesting_level 设置,但它没有帮助,我发现解决问题的唯一方法是:
{{ form_start(form, {'attr': {'class': 'form_template'} }) }}
{{ form_widget(form) }}
<input type="submit" value="Send"/>
{{ form_rest(form) }}
</form>
这是一个丑陋的修复。
现在我想知道为什么form_end(form) 会出现这样的错误,而form_rest(form) 一切正常?
【问题讨论】:
-
你不能得到更详细的错误信息吗?
-
documentation on embedded form collections 中有一条特别提到该消息的注释。 (我无法直接链接到它,只能搜索该页面上的消息。)
-
@t-n-y 我有一个,但它很长而且很痛苦@Don'tPanic 是的,我去过这个页面,但他们唯一鼓励的是增加
xdebug.max_nesting_level -
如果您不显示所有信息,您希望我们如何帮助您,因为您认为这是“漫长而痛苦的”......
-
好吧,如果您使用嵌套表单集合,它们确实提供了另一种增加该设置的替代方法。 "... 或使用
form_row" 手动呈现每个表单字段
标签: php symfony twig xdebug symfony-forms