Как глобально установить параметр для каждого дочернего элемента?

#symfony #symfony-forms

#symfony #symfony-forms

Вопрос:

У меня есть форма класса с несколькими дочерними элементами:

 class ReservationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('from', DateType::class, ["label" => "reservation.from?", "widget" => "single_text", "error_bubbling" => true]);
        $builder->add('to', DateType::class, ["label" => "reservation.to?", "widget" => "single_text", "error_bubbling" => true]);
        $builder->add("name", TextType::class, ["label" => "reservation.name", "error_bubbling" => true]);
        $builder->add("surname", TextType::class, ["label" => "reservation.surname", "error_bubbling" => true]);
        $builder->add('book', SubmitType::class, ["label" => "reservation.booking"]);
    }
}
 

Я индивидуально устанавливаю error_bubling параметр для каждого дочернего элемента. Это работает правильно.
Я уверен, что есть лучший способ сделать это.

Ответ №1:

Вы можете создать расширение формы, но это повлияет на все формы

 namespace AppFormExtension;

use SymfonyComponentFormAbstractTypeExtension;
use SymfonyComponentFormExtensionCoreTypeDateType;
use SymfonyComponentFormExtensionCoreTypeTextType;

class ErrorBublingExtension extends AbstractTypeExtension
{
    public static function getExtendedTypes(): iterable
    {
        return [DateType::class, TextType::class];
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'error_bubbling' => true,
        ]);
    }
}
 

Комментарии:

1. Спасибо за ответ. Проверено, и это работает 🙂 Но, как вы упомянули, это влияет на все формы. Это огромный недостаток .