Как добавить динамическую ошибку для проверки формы Symfony с помощью createnamebuilder? - PullRequest
0 голосов
/ 14 декабря 2018

Я создаю свой собственный конструктор форм, используя createNamebuilder().Вот так

$builder = $this->formFactory->createNamedBuilder($formName, $phoneNumberType, $data, $formOptions);

У меня PhoneNumberType.внутри него я добавляю к стране-строителю номер и число.

$builder->add('countryNumber', CountryCodeType::class);
$builder->add('number', NumberType::class);

Как добавить ограничение в число, которое требуется?Я пытаюсь использовать это

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $contactNumber = $builder->getData();
    $countryCode = null;
    if ($contactNumber instanceof ContactNumber) {
        $countryCode = $contactNumber->getCountryNumber();
    }

    $builder->add('countryNumber', CountryCodeType::class, ['data' => $countryCode]);
    $builder->add('number', NumberType::class, [
        'required' => true,
        'constraints' => [new NotBlank(['message' => 'Phone number is required.'])]
    ]);
}

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

Когда я отправляю свою форму.Сообщение об ошибке не отображается.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы пытаетесь добавить форму после публикации. Вам необходимо использовать события https://symfony.com/doc/current/form/dynamic_form_modification.html

или вы можете добавить ограничения к объекту после отправки пустой формы данных, что приведет к ошибкам.

use Symfony\Component\Validator\Constraints as Assert;

class ContactNumber
{
    /**
    * @Assert\NotBlank()
    * ..
    */
    private $number
}

и framework.yaml

framework:
    validation:      { enable_annotations: true }
...