2014-11-05 2 views
2

Я пошел посмотреть, как работает расширенная функция Twig от Symfony form_widget. Я ожидал найти функцию в symfony/src/Symfony/Bridge/Twig/Extension/FormExtension.php. Он добавлен в список функций там:Где код `form_widget()` Twig function?

public function getFunctions() 
{ 
    return array(

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

... 
    ); 
} 

Но не указано ни одного вызываемого (т.е. второй аргумент равен нулю). Итак, какой код вызывается, когда я использую form_widget(a_form_element) в шаблоне Twig?

+0

Вы когда-нибудь это выясняли? Ищете его как отправную точку для виджета таблицы, которую я хочу создать – Andy

ответ

2

Мой ответ немного поздний, но я только что пришел, чтобы исследовать тот же вопрос. Это то, что я нашел:

Код, который вызывается при использовании form_widget(), производится непосредственно из класса SearchAndRenderBlockNode при компиляции шаблона. Затем скомпилированный код шаблона вызывает вызов Symfony\Component\Form\FormRenderer::searchAndRenderBlock(), где находится соответствующий блок Twig, снабженный контекстом и визуализированным.

+0

Спасибо, что воспользовались старым вопросом. Очень приятно наконец понять, как работает «волшебство». – dnagirl

0

Я не называю пространство имен там. Или этот код.

Шахта в Symfony \ Мост \ Twig \ Extension \ FormExtension.php

Он использует Symfony \ Мост \ Прут \ узел \ SearchAndRenderBlockNode

+0

Я отредактировал ссылку, чтобы указать на правильный источник, но код в обоих местах одинаковый. В любом случае 'Twig_SimpleFunction' принимает 3 аргумента: первая - это строка, которая должна быть распознана как имя функции в шаблоне Twig, вторая - действительная выполняемая PHP-функция, а 3rd - это массив опций для передачи к функции PHP. 'SearchAndRenderBlockNode' является опцией. Я хочу знать, какую функцию PHP вызывается, когда я использую 'form_widget()' в шаблоне Twig. – dnagirl

0

Вы можете найти его в FrameworkBundle/Resources/views/Form/form_widget.html.php или эквивалент в шаблоне Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig.

+0

Я не ищу код шаблона. Я ищу код, который передает форму в код шаблона. – dnagirl