我去看看Symfony的扩展Twig函数form_widget
实际上是如何工作的。我期待在symfony / src / Symfony / Bridge / Twig / Extension / FormExtension.php 中找到该功能。它被添加到那里的功能列表中:
public function getFunctions()
{
return array(
...
new \Twig_SimpleFunction('form_widget', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
...
);
}
但是没有列出可调用的内容(即第二个arg为null)。那么当我在Twig模板中使用form_widget(a_form_element)
时会调用什么代码?
答案 0 :(得分:2)
我的回答有点晚,但我刚刚调查了同样的问题。这是我发现的:
使用form_widget()
时调用的代码是在编译模板时由SearchAndRenderBlockNode
类直接生成的代码。然后,编译后的模板代码会调用Symfony\Component\Form\FormRenderer::searchAndRenderBlock()
,其中包含正确的Twig块,提供上下文并进行渲染。
答案 1 :(得分:0)
我不认识那里的名字空间。或者那个代码。
我的是Symfony \ Bridge \ Twig \ Extension \ FormExtension.php
它使用Symfony \ Bridge \ Twig \ Node \ SearchAndRenderBlockNode
答案 2 :(得分:0)
您可以在FrameworkBundle/Resources/views/Form/form_widget.html.php
中找到它,也可以在模板Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
中找到它。
答案 3 :(得分:0)
现在已贬值,但是这里是直接提供的代码,当您调用eg时,这些代码直接使用方法呈现表单。 form_row()树枝函数这里是:https://github.com/symfony/symfony/blob/4.4/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/FormHelper.php