向Symfony 3添加所有表单类型的帮助选项

How could I add custom 'help' option to all existing Symfony3 Type's?

In Symfony2, I did it like this http://toni.uebernickel.info/2012/11/03/how-to-extend-form-fields-in-symfony2.1.html but now I'm upgrading to Symfony3 and it does not work any more - it gives me The option "help" does not exist.

http://symfony.com/doc/current/form/form_customization.html#adding-help-messages would work, but it would require to move all help texts into template:

{{ form_widget(form.title, {'help': 'foobar'}) }}

...from Type classes:

->add(
    'periodFrom',
    TextType::class,
    [
        'label' => 'period-from',
        'required' => false,
        'help' => 'period-from.help'
    ]
)

I'd like to avoid that. Thanks.

To do that and after this http://symfony.com/doc/current/form/form_customization.html#adding-help-messages you can create a form type extension to pass help option to all form fields:

<?php
// src/AppBundle/Form/Extension/FormTypeExtension.php
namespace AppBundle\Form\Extension;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;

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

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

    public function getExtendedType()
    {
        return FormType::class;
    }
}

Now register the form type extension:

services:
    app.form_type_extension:
        class: AppBundle\Form\Extension\FormTypeExtension
        tags:
            - { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }