2014-11-05 78 views
2

我去看看Symfony的扩展Twig函数form_widget实际上是如何工作的。我期待在symfony/src/Symfony/Bridge/Twig/Extension/FormExtension.php中找到该功能。它被添加到功能列表中:`form_widget()`Twig函数的代码在哪里?

public function getFunctions() 
{ 
    return array(

... 
     new \Twig_SimpleFunction('form_widget', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))), 

... 
    ); 
} 

但是没有可调用的列表(即第二个参数为空)。那么在Twig模板中使用form_widget(a_form_element)时会调用哪些代码?

+0

你有没有想过这个?寻找它自己作为表格窗口小部件的出发点我想创建 – Andy 2016-02-23 21:21:06

回答

2

我的答案有点晚了,但我碰巧调查了同样的问题。这是我发现的:

当您使用form_widget()时调用的代码是在编译模板时直接由SearchAndRenderBlockNode类生成的。编译好的模板代码然后调用Symfony\Component\Form\FormRenderer::searchAndRenderBlock(),找到合适的Twig块,并提供上下文并进行渲染。

+0

感谢您对旧问题的跟进。真的很高兴终于明白“魔法”是如何运作的。 – dnagirl 2016-06-14 13:51:52

0

我不承认那里的名字空间。或者那个代码。

矿是Symfony的\桥\嫩枝\延期\ FormExtension.php

它使用的Symfony \桥\嫩枝\节点\ SearchAndRenderBlockNode

+0

我编辑了指向正确源代码的链接,但两个地方的代码都是相同的。无论如何,'Twig_SimpleFunction'需要3个参数:第一个是在Twig模板中应该被识别为函数名的字符串,第二个是运行的实际PHP函数,第三个是要传递的选项数组到PHP函数。 'SearchAndRenderBlockNode'是一个选项。我想知道在Twig模板中使用'form_widget()'时会调用哪些PHP函数。 – dnagirl 2014-11-05 18:43:14

0

你可以找到它在FrameworkBundle/Resources/views/Form/form_widget.html.php或者等值的模板Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

+0

我不在寻找模板代码。我正在寻找将表单传递给模板代码的代码。 – dnagirl 2014-11-10 11:44:27