如何使用现有的窗体小部件模板块

时间:2015-08-27 19:37:05

标签: forms symfony twig

我正在创建自定义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

1 个答案:

答案 0 :(得分:1)

事实证明,访问这些块的正确方法是使用block()函数。所以,而不是

{{ choice_widget( form ) }}

它的

{{ block( 'choice_widget', form ) }}