В моем приложении я пытаюсь отобразить блок помощи формы, используя советы из официальной кулинарной книги 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.
Создайте расширение типа формы, расширяющее тип формы:
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'])
;
form_row(form.pageTitle, {'help': 'some help'})
.