Symfony 3 — Ограничения валидации не работают

У меня проблема с моими валидациями, ни одна из моих валидаций не работает.
Я следовал за документацией и поставил правильные коды, но ничего не сделал .. Вот одна из моих сущностей, например:

<?php

namespace ProjectBundle\Entity\User;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\SoftDeleteable\Traits\SoftDeleteableEntity;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use ProjectBundle\Entity\Traits\BlameableEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
* @ORM\Entity(repositoryClass="ProjectBundle\Repository\User\UserRepository")
* @Gedmo\SoftDeleteable(fieldName="deletedAt")
* @ORM\Entity
* @ORM\UniqueEntity("email")
* @ORM\Table(name="user")
*/
class User extends BaseUser
{
use TimestampableEntity;
use SoftDeleteableEntity;
use BlameableEntity;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;/**
* @Assert\NotBlank()
* @Assert\Length(
*      min = 2,
*      max = 254,
*      minMessage = "Votre nom d'utilisateut doit comporter au minimum {{ limit }} caractères.",
*      maxMessage = "Votre nom d'utilisateut doit comporter au maximum {{ limit }} caractères."* )
*
* @var string
*/
protected $username;

/**
* @Assert\NotBlank()
* @Assert\Length(
*      min = 2,
*      max = 254,
*      minMessage = "Votre nom d'utilisateut doit comporter au minimum {{ limit }} caractères.",
*      maxMessage = "Votre nom d'utilisateut doit comporter au maximum {{ limit }} caractères."* )
*
* @var string
*/
protected $plainPassword;/**
* @Assert\NotBlank()
*
* @Assert\Email(
*     message = "L'adresse mail '{{ value }}' n'est pas valide.",
*     checkMX = true
* )
*
* @var string
*/
protected $email;

/**
* @var string
* @Assert\NotBlank()
*
* @ORM\Column(name="lastname", type="string", length=100)
*/
private $lastname;

/**
* @var string
* @Assert\NotBlank()
*
* @ORM\Column(name="firstname", type="string", length=100)
*/
private $firstname;

И конечно эта ошибка (например): Integrity constraint violation: 1048 Column 'lastname' cannot be null
Когда я отправляю свою форму.

В моем config.yml у меня есть: validation: { enable_annotations: true }

И в моем контроллере:

    /**
* @Route("/new", name="admin_user_new")
* @Security("has_role('ROLE_USER')")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function newAction(Request $request)
{

$entity = new User();
$form = $this->createForm('ProjectBundle\Form\User\User', $entity);$form->handleRequest($request);

if ($form->isSubmitted()) {
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();

return $this->redirectToRoute('admin_user_show', array('id' => $entity->getId()));
}
}

return $this->render('ProjectBundle:admin/User:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}

На других моих проектах это работает хорошо, но я не вижу, что я забыл.

У тебя есть идея?
Спасибо

1

Решение

Добавьте nullable = true, чтобы поле оставалось пустым

    /**
* @var string
* @Assert\NotBlank()
*
* @ORM\Column(name="lastname", type="string", length=100, nullable = true)
*/
private $lastname;

РЕДАКТИРОВАТЬ:

if ($form->isSubmitted()) {
if ($form->isValid()) {

$entity = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();

return $this->redirectToRoute('admin_user_show', array('id' => $entity->getId()));
}
}
1

Другие решения

Других решений пока нет …