Symfony2のフォームの各フィールドの後にヘルプメッセージを追加しようとしています。
私は公式ドキュメントで1つの解決策について読みました: http://symfony.com/doc/current/cookbook/form/form_customization.html#adding-help-messages
ただし、すべてのフォームを手動で作成する必要があるため、このソリューションはほとんど意味がありません。たとえば、ラベルを定義するのは簡単です。$formBuilder->add('myfieldname', 'text', array('label'=>'some my field label'));
しかし、ヘルプメッセージを渡す方法は? (言い換えれば、いくつかのカスタム変数)
$formBuilder->add('myFieldName', 'text', array('help' => 'My Help Message'));
しかし、これをすべてのフォームのデフォルトオプションとして追加する拡張機能も追加する必要があると思います。
https://github.com/simplethings/SimpleThingsFormExtraBundle#helpextension
これにより、FormTypesから直接属性を編集できるようになります。
別の拡張子のない別のメソッド:
フォームビルダークラスの場合:
$builder->add('yourField',null, array('attr'=>array('help'=>'text help')))
フォームテンプレートを書き直します。
{% block form_row %}
{% spaceless %}
{{ form_label(form) }}
{{ form_widget(form) }}
{% for attrname, attrvalue in attr %}
{% if attrname == 'help' %}
<span class="help-block">{{ attrvalue }}</span>
{% endif %}
{% endfor %}
{{ form_errors(form) }}
{% endspaceless %}
{% endblock form_row %}
説明したように、公式ドキュメントでソリューションを使用できます。
しかし、作業はまだ完了していません。この記事に基づいて、フォームタイプエクステンションを作成する必要があります: http://symfony.com/doc/current/cookbook/form/create_form_type_extension.html
フォームタイプ拡張の作成が完了したら、次のようなヘルプメッセージを追加できます。
$form = $this->createFormBuilder()
->add('name', 'text', array(
'help' => 'this is a help message to user',
))
これはネイティブのより良いソリューションだと思います。また、symfony2フォームでヘルプオプションを有効にして設定する方法を示すこの素晴らしい記事を読むことをお勧めします: http://toni.uebernickel.info/2012/11/03/how-to-extend-form -fields-in-symfony2.1.html
少し外れたトピックですが、プロジェクトでBootstrapを使用することを計画している場合は、Mopa Bootstrapバンドル。
デモ: http://bootstrap.mohrenweiserpartner.de/mopa/bootstrap/forms/help_texts
GitHub: https://github.com/phiamo/MopaBootstrapBundle
例:
<?php
$form = $this->get('form.factory')
->createNamedBuilder('form_name')
->setMethod('POST')
->add('testSelect', 'choice', [
'choices' => ['val1' => 'Value 1', 'val2' => 'Value 2'],
'required' => true,
'help_block' => 'Here some help text!!!'
])
->add('Save', 'submit')
->getForm();
return $form->createView();
Symfony 4.1以降、次のことができます。
$builder->add('email', null, [
'help' => 'Make sure to add a valid email',
]);