Не удается получить сообщения об ошибках из Symfony Form 4.2 - PullRequest
0 голосов
/ 21 января 2019

Я использую Symfony Form 4.2 в автономном режиме.У меня есть элемент формы с несколькими полями в файле HTML.Чтобы иметь возможность проверки в PHP, я реплицировал форму в PHP, используя Symfony Form 4.2, как показано ниже:

    $formFactory = Forms::createFormFactoryBuilder()
    ->addExtension(new ValidatorExtension($validator))
    ->getFormFactory();

    $form = $formFactory->createBuilder()
    ->add('pk_firstname', TextType::class, [
        'constraints' => [new NotBlank(),
            new Length([
                    'min' => 2,
                    'max' => 50,
                    'minMessage' => 'Your first name must be at least {{ limit }} characters long',
                    'maxMessage' => 'Your first name cannot be longer than {{ limit }} characters']
            )],
    ])
    ->add('pk_lastname', TextType::class, [
        'constraints' => [new NotBlank(),
            new Length([
                    'min' => 2,
                    'max' => 50,
                    'minMessage' => 'Your first name must be at least {{ limit }} characters long',
                    'maxMessage' => 'Your first name cannot be longer than {{ limit }} characters']
            )],
    ])
    ->add('pk_emailaddress', EmailType::class, [
        'constraints' => [new NotBlank(), new Email(
            [
                'message' => 'The email "{{ value }}" is not a valid email.',
                'mode' => 'strict',
            ]
        )],
    ])
    ->add('pk_phonenumber', TelType::class, [
        'constraints' => [],
    ])
    ->add('pk_message', TextareaType::class, [
        'constraints' => [new NotBlank()],
    ])
    ->getForm();

Когда форма отправляется в веб-интерфейсе, я предотвращаю поведение по умолчанию с помощью JavaScript и создаю AJAXзапрос в файл PHP с отправленными данными, где форма Symfony используется для проверки правильности отправленных данных.

Затем я вручную отправляю форму, как показано ниже:

    $request = Request::createFromGlobals();

$submitData = array("pk_firstname" => $request->request->get('pk_firstname'),
    "pk_lastname" => $request->request->get('pk_lastname'),
    "pk_emailaddress" => $request->request->get('pk_emailaddress'),
    "pk_phonenumber" => $request->request->get('pk_phonenumber'),
    "pk_message" => $request->request->get('pk_message'));

$form->submit($submitData);

Проблема заключается в том, что приотправлены неверные данные isValid() метод $form объект возвращает форма недействительна , но getErrors() методы возвращают пустой массив.

Есть ли что-то, что я делаю здесь неправильно?

Я хотел бы получить поля, которые нарушают ограничения и которые позволяют передавать эти сообщения об ошибках в JavaScript для отображения в веб-интерфейсе.

1 Ответ

0 голосов
/ 27 января 2019

Если я вас правильно понял, вы просто хотите сериализовать объект формы, верно?

Для этого вы можете сделать следующее:

 public function getErrorMessages(FormInterface $form)
    {
        $errors = array();
        foreach ($form->getErrors(true, true) as $error) {
            $propertyPath = str_replace('data.', '', $error->getCause()->getPropertyPath());
            $errors[$propertyPath] = $error->getMessage();
        }

        return $errors;
    }

Вы должны передать объект формы этому методу, например, $serializedErrors = getErrorMessages($form).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...