API REST Symfony - как обрабатывать неправильные формы - PullRequest
0 голосов
/ 01 сентября 2018

Symfony 4 в качестве бэкэнда, Angular в качестве внешнего интерфейса. У меня есть простая форма - скажем, два поля, которые не могут быть пустыми.

Организация:

/**
 * @var string
 *
 * @ORM\Column(name="signature", type="string", length=32, unique=true)
 * @JMSSerializer\Expose
 */
private $signature;

/**
 * @var int
 *
 * @ORM\Column(name="status", type="integer")
 * @JMSSerializer\Expose
 */
private $status;

Так что по умолчанию NOT NULL.

После оставления одного из этих полей пустым и отправки формы я получаю 500 ошибок. Dev.log говорит: «Нарушение ограничения целостности: 1048« Статус »столбца не может быть нулевым». Очевидно. Но как отловить эту ошибку? Или, может быть, просто запретить отправку формы с пустыми полями на угловой стороне?

Мой контроллер:

public function postAction(Request $request)
{
    $form = $this->createForm('App\Form\ItemType', null, [
        'csrf_protection' => false,
    ]);
    $form->submit($request->request->all());

    if (!$form->isValid()) {            
        return $form;
    }
    ...

Как и предлагалось в другом месте, я мог бы отправить массив ошибок:

$errors = [];
foreach ($form->getErrors(true) as $error) {
    if ($error->getOrigin()) {
        $errors[$error->getOrigin()->getName()][] = $error->getMessage();
    }
}

Но метод isValid () никогда не вызывается.

КСТАТИ) Это хорошая идея, чтобы вернуть форму в качестве ответа в этом случае? Я видел это в каком-то уроке. Но, возможно, вернувшись

new View(null, Response::HTTP_BAD_REQUEST) 

с какой-то дополнительной информацией будет лучше?

1 Ответ

0 голосов
/ 01 сентября 2018

Привет @Tompo, если ты хочешь использовать форму для проверки, тебе нужно сделать то же самое в своей сущности

use Symfony\Component\Validator\Constraints as Assert;

/**
 * @var string
 *
 * @ORM\Column(name="signature", type="string", length=32, unique=true)
 * @Assert\NotBlank(message="Please enter a signature")
 * @JMSSerializer\Expose
 */
private $signature;

/**
 * @var int
 *
 * @ORM\Column(name="status", type="integer")
 * @Assert\NotBlank(message="Please enter a status")
 * @JMSSerializer\Expose
 */
private $status;

Теперь вы можете получить вызов, если поля пустые, после этого вам нужно отредактировать свой контроллер для отображения сообщений об ошибках

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