如何使用现有的小部件表单模板块
How to use existing widget form template blocks
我正在创建自定义 Twig 表单模板块来进行一些特殊渲染。
到目前为止,我一直无法使用某些内置的表单块。具体来说,还有 {{ *_widget() }}
个块。
示例:
声明一个新的 Twig 函数。
/* src/SiteBundle/Library/TwigExtension.php - Bundle-specific Twig extension */
...
public function getFunctions
{
$ret = [
new \Twig_SimpleFunction( 'wwui_myBlock', null, ['node_class'=>'Symfony\Bridge\Twig\Node\RenderBlockNode, 'is_safe'=>['html']] )
];
return $ret;
}
该扩展名已在 service.yml 文件中注册,并且由于没有关于未定义 wwui_myBlock 函数的错误,因此显然可以识别。
定义 Twig 块。
{# src/SiteBundle/Resources/views/Form/fields.html.twig - Custom form blocks #}
{% block wwui_myBlock %}
<div class="formRow form-group-xs clearfix">
<div class="col-xs-1"></div>
{%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' col-xs-2' )|trim}) -%}
{{ form_label( form ) }}
<div class="col-xs-9">
{{ choice_widget( form ) }}
</div>
</div>
{% endblock wwui_myBlock %}
在页面模板中。
{# Page-specific template #}
...
{{ form_start( form ) }}
...
{{ wwui_myBlock( form.options ) }} {# options is a choice with radio buttons. #}
...
{{ form_end( form ) }}
呈现此页面时抛出异常:
The function "choice_widget" does not exist in SiteBundle:Form:fields.html.twig at line 62
我的 fields.html.twig
文件 "uses" bootstrap_3_horizontal_layout.html.twig
。该文件 "uses" bootstrap_3_layout.html.twig
反过来,"uses" Twig 的默认值 form_div_layout.html.twig
。
为什么我的自定义块看不到 form_div_layout.html.twig
中定义的 choice_widget
?
事实证明,访问此类块的正确方法是使用 block() 函数。所以,而不是
{{ choice_widget( form ) }}
是
{{ block( 'choice_widget', form ) }}
我正在创建自定义 Twig 表单模板块来进行一些特殊渲染。
到目前为止,我一直无法使用某些内置的表单块。具体来说,还有 {{ *_widget() }}
个块。
示例:
声明一个新的 Twig 函数。
/* src/SiteBundle/Library/TwigExtension.php - Bundle-specific Twig extension */
...
public function getFunctions
{
$ret = [
new \Twig_SimpleFunction( 'wwui_myBlock', null, ['node_class'=>'Symfony\Bridge\Twig\Node\RenderBlockNode, 'is_safe'=>['html']] )
];
return $ret;
}
该扩展名已在 service.yml 文件中注册,并且由于没有关于未定义 wwui_myBlock 函数的错误,因此显然可以识别。
定义 Twig 块。
{# src/SiteBundle/Resources/views/Form/fields.html.twig - Custom form blocks #}
{% block wwui_myBlock %}
<div class="formRow form-group-xs clearfix">
<div class="col-xs-1"></div>
{%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' col-xs-2' )|trim}) -%}
{{ form_label( form ) }}
<div class="col-xs-9">
{{ choice_widget( form ) }}
</div>
</div>
{% endblock wwui_myBlock %}
在页面模板中。
{# Page-specific template #}
...
{{ form_start( form ) }}
...
{{ wwui_myBlock( form.options ) }} {# options is a choice with radio buttons. #}
...
{{ form_end( form ) }}
呈现此页面时抛出异常:
The function "choice_widget" does not exist in SiteBundle:Form:fields.html.twig at line 62
我的 fields.html.twig
文件 "uses" bootstrap_3_horizontal_layout.html.twig
。该文件 "uses" bootstrap_3_layout.html.twig
反过来,"uses" Twig 的默认值 form_div_layout.html.twig
。
为什么我的自定义块看不到 form_div_layout.html.twig
中定义的 choice_widget
?
事实证明,访问此类块的正确方法是使用 block() 函数。所以,而不是
{{ choice_widget( form ) }}
是
{{ block( 'choice_widget', form ) }}