如何为所有现有的Symfony3 Type添加自定义“帮助”选项?
在Symfony2中,我这样做了http://toni.uebernickel.info/2012/11/03/how-to-extend-form-fields-in-symfony2.1.html,但现在我正在升级到Symfony3和它不再起作用 - 它给了我选项“帮助”不存在 。
http://symfony.com/doc/current/form/form_customization.html#adding-help-messages可以使用,但需要将所有帮助文本移动到模板中:
{{ form_widget(form.title, {'help': 'foobar'}) }}...来自类型类:
->add( 'periodFrom', TextType::class, [ 'label' => 'period-from', 'required' => false, 'help' => 'period-from.help' ] )我想避免这种情况。 谢谢。
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.
最满意答案
为此,在此http://symfony.com/doc/current/form/form_customization.html#adding-help-messages之后,您可以创建表单类型扩展,以将help选项传递给所有表单字段:
<?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; } }现在注册表单类型扩展名:
services: app.form_type_extension: class: AppBundle\Form\Extension\FormTypeExtension tags: - { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }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 }更多推荐
发布评论