我正在创建自定义Twig表单模板块以进行一些特殊渲染。
到目前为止,我还无法使用一些内置的表单块。具体而言,以及public class RecyclerItemClickListener implements
RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context,
OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context,
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null
&& mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView,
view.getChildPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
}
块。
示例:
声明一个新的Twig函数。
{{ *_widget() }}
扩展名已在service.yml文件中注册,并且显然已被识别,因为没有关于未定义的wwui_myBlock函数的错误。
定义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;
}
在页面模板中。
{# 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
。该文件“使用”bootstrap_3_horizontal_layout.html.twig
,而“{1}}依次”使用“Twig的默认bootstrap_3_layout.html.twig
。
为什么我的自定义模块无法看到form_div_layout.html.twig
中定义的choice_widget
?
答案 0 :(得分:1)
事实证明,访问这些块的正确方法是使用block()函数。所以,而不是
{{ choice_widget( form ) }}
它的
{{ block( 'choice_widget', form ) }}