Symfony2小枝引用基础小部件



我正在尝试自定义我的symfony2形式的choice_widget_expanded部分,并试图参考的基础(标准)为choice_widget_collapse按此指令http://symfony.com/doc/current/cookbook/form/form_customization.html

但是我得到一个错误说

Notice: Undefined index: choice_widget_collapsed in /var/www/beta/app/cache/dev/twig/ff/8a/9f46c90c543b16e78e981aeda67b.php line 19

这是我的代码:

{% extends '::base.html.twig' %}
{% use 'form_div_layout.html.twig' with choice_widget_collapsed as base_choice_widget_collapsed %}
{% form_theme form _self %}
{% block choice_widget %}
{% spaceless %}
    {% if expanded %}
        {{ block('choice_widget_expanded') }}
    {% else %}
        {{ block('base_choice_widget_collapsed') }}
    {% endif %}
{% endspaceless %}
{% endblock choice_widget %}

{% block choice_widget_expanded %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
    {% for child in form %}
        {{ form_widget(child) }}
        {{ form_label(child) }}
        <br />
    {% endfor %}
    </div>
{% endspaceless %}
{% endblock choice_widget_expanded %}

{% block contents %}

这适用于我在一个新的sf 2.2.1的作曲家安装。在dev环境中注册模板更改不需要清除缓存,但值得一试。如果使用操作码缓存,也可能需要停止并启动(而不是重新启动)apache/php5-fpm。

因为你只修改了choice_widget_expanded,你真正需要的是:

test.html.twig

{% extends '::base.html.twig' %}
{% form_theme form _self %}
{% block choice_widget_expanded %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
    {% for child in form %}
        {{ form_widget(child) }}
        {{ form_label(child) }}
        <br />
    {% endfor %}
    </div>
{% endspaceless %}
{% endblock choice_widget_expanded %}
{% block body %}
<form>
{{ form_row(form.choice) }}
</form>
{% endblock %}

testAction

/**
 * @Template()
 */
public function testAction()
{
    $builder = $this->createFormBuilder();
    $builder->add('choice', 'choice', array(
            'choices'=>array('one'=>'one', 'two'=>'two', 'three'=>'three'),
            'expanded'=>true
    ));
    $form = $builder->getForm();
    return array('form'=>$form->createView());
}

啊…我确信迪伦的答案是正确的,但对于symfony2版本,我使用(2.0.16)的模板的形式看起来有点不同,choice_widget_expanded没有它自己的块,但它都在这个

{% block choice_widget %}
{% spaceless %}
{% if expanded %}
    <div {{ block('widget_container_attributes') }}>
    {% for child in form %}
        {{ form_widget(child) }}
        {{ form_label(child) }}
        <br />          {# <-------- Here's my addition to the template #}
    {% endfor %}
    </div>
{% else %}
<select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
    {% if empty_value is not none %}
        <option value="">{{ empty_value|trans }}</option>
    {% endif %}
    {% if preferred_choices|length > 0 %}
        {% set options = preferred_choices %}
        {{ block('widget_choice_options') }}
        {% if choices|length > 0 and separator is not none %}
            <option disabled="disabled">{{ separator }}</option>
        {% endif %}
    {% endif %}
    {% set options = choices %}
    {{ block('widget_choice_options') }}
</select>
{% endif %}
{% endspaceless %}
{% endblock choice_widget %}

我当然应该把代码从我自己的代码库中拉出来,而不是从github上抓取最新版本。

最新更新