1

在我的应用程序中,我尝试使用官方 Symfony2食谱中的提示显示表单帮助块。这是我的代码:

{% extends 'form_div_layout.html.twig' %}

{% block form_widget_simple %}
  {{ block('base_form_widget_simple') }}

  {{ dump(help) }}
  {% if help is defined %}
     <span class="help">{{ help }}</span>
  {% endif %}
{% endblock %}

并使用这个主题:

{{ form_row(form.pageTitle, {'help': 'some help'}) }}

有了这个我得到错误Variable "help" does not exist。任何想法我错过了什么?PS 我使用 Symfony 2.7.1。

4

1 回答 1

2

创建一个扩展表单类型的表单类型扩展:

namespace Acme\AppBundle\Form\Extension;

use ...

class FieldTypeHelpExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->setAttribute('help', $options['help']);
    }

    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $view->vars['help'] = $options['help'];
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'help' => null
        ]);
    }

    public function getExtendedType()
    {
        return 'form';
    }

}

将扩展定义为服务:

acme_app.form.extension.field_type_help:
        class: Acme\AppBundle\Form\Extension\FieldTypeHelpExtension
        tags:
            - { name: form.type_extension, alias: form }

创建一个扩展表单 div 布局的模板:

{% extends 'form_div_layout.html.twig' %}

{% block field_help %}
    {% if help is defined and help %}
        <p class="help-block">{{ help|trans }}</p>
    {% endif %}
{% endblock field_help %}

{% block integer_widget %}
    {{ parent() }}
    {{ block('field_help') }}
{% endblock integer_widget %}

{% block form_widget %}
    {{ parent() }}
    {{ block('field_help') }}
{% endblock form_widget %}

将此模板配置为 config.yml 上的表单主题

twig:
    form_themes:
        - 'Form/fields.html.twig'

现在您可以在模板上渲染 a 字段时使用它:

{{ form_widget(form.name, { 'help': 'this is help' }) }}

或在您的表单类型中:

$form->add('name', 'text', ['help' => 'this is help']);

于 2015-11-18T22:03:51.083 回答