【问题标题】:Shortcuts with Symfony2 Twig forms : form_widgetSymfony2 Twig 表单的快捷方式:form_widget
【发布时间】:2013-02-20 15:03:53
【问题描述】:

我想更换:

{{ form_errors(form.name) }}
{{ form_widget(form.name, { 'attr': {'placeholder': 'Nom'} }) }}

作者:

{{ form.name|field('Nom') }}

我怎么能这样做?我尝试在 Twig 扩展中执行此操作,但无法访问 form_widget 函数。

编辑:我可以使用form.name 属性(包括父表单)来做到这一点,但我会重复 symfony 代码,这将是一个非常丑陋的大黑客

【问题讨论】:

    标签: php forms symfony refactoring twig


    【解决方案1】:

    如果你让我把 attr 移到你的表单类中会更有意义:

    class SomeForm extends AbstractType {
          //.....
          $builder->add('name', 'text', array('attr' => array('placeholder'=>'Nom')));
    }
    

    因为我猜你需要一些你可以检查的字段的自定义渲染:

    http://symfony.com/doc/2.0/cookbook/form/form_customization.html#how-to-customize-an-individual-field

    您还可以创建一个新类型并按照此处的说明对其进行自定义:

    http://symfony.com/doc/2.0/cookbook/form/form_customization.html#what-are-form-themes

    你甚至可以改变默认的渲染方式,让 symfony 使用字段的标签字符串默认渲染你的占位符标签(全局启用表单主题的细节在上面引用的链接中介绍):

    {% block text_widget %}
        {% set type = type|default('text') %}
        <input type="text" {{ block('widget_attributes') }} value="{{ value }}" />
    {% endblock field_widget %}
    
    {% block widget_attributes %}
      {% spaceless %}
        {% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %} placeholder="{{ label|trans }}"
      {% endspaceless %}
    {% endblock widget_attributes %}
    
    {% block form_row %}
      {% spaceless %}
        <div class="my-class">
            {{ form_errors(form) }}
            {{ form_widget(form) }}
        </div>
      {% endspaceless %}
    {% endblock form_row %}
    

    因此,您将使用 symfony 提供的主题将自己限制为 form_row(form.name)。 Symfony 的方法在我看来“非常”干/死。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多