Добавление блока справки с использованием формы темы

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.

  • 0
    Я ничего не знаю о Symfony2. Но, как правило, получение переменной X не существует, ошибка означает, что вы не определили данную переменную. Где вы определяете свою переменную help?
  • 0
    @NatalieHedström NatalieHedström, я понимаю это. Это должно быть передано через строку form_row(form.pageTitle, {'help': 'some help'}) .
Показать ещё 4 комментария
Теги:
twig
symfony-2.7

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'

Теперь вы можете использовать его при визуализации поля в шаблоне:

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

Или в вашем типе формы:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню