У меня проблема с сообщением проверки, когда я использую UniqueEntity.
Вот мой код:
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator;
/**
* LaboratoryTestRequest
*
* @ORM\Table(name="laboratory_test_request")
* @ORM\Entity(repositoryClass="...\...Bundle\Repository\...Repository")
* @UniqueEntity(fields={"num"}, message="It looks like the num is already use !")
*/
class MyClass
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="num", type="string", length=255, unique=true)
*/
private $num;
Проблема в том, что, когда я отправляю форму с "num"это уже используется, у меня нет «сообщения» для уникального ограничения.Форма отправлена, и у меня есть эта ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata ... for the
key 'Uniq_80B6DC...'
Я не понимаю, почему сообщение не отображается в форме.Может быть, я что-то забыл, но я не знаю, чего не хватает, потому что это похоже на документацию.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ
Я нашел, что было не так.Это было в контроллере.Ни одно из проверочных ограничений не работало.Проблема заключалась в следующем:
if($request->isMethod('POST') && $form->handleRequest($request)->isSubmitted())
{
...
}
В этом коде я не проверяю правильность формы, я думал, что isSubmitted проверить это, но это не так.Итак, решение, которое я нашел на данный момент, состоит в том, чтобы добавить метод isValid () следующим образом:
if($request->isMethod('POST') && $form->handleRequest($request)->isSubmitted())
{
...
}
Таким образом, у меня есть сообщение об ошибке в моей форме.Есть только небольшая проблема, форма отправляется, затем я возвращаюсь к форме с сообщением об ошибке, как я хочу, и ничего не сохраняется в базе данных.
Но если это возможно, я хочу получить сообщение об ошибке сразу после нажатия на кнопку отправки.Поэтому я на данный момент оставляю тему открытой, если кто-то захочет поделиться другим решением или обновить его.