`form_widget()`Twig函数的代码在哪里?

时间:2014-11-05 17:49:22

标签: symfony twig

我去看看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)时会调用什么代码?

4 个答案:

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