У меня проблема с моими валидациями, ни одна из моих валидаций не работает.
Я следовал за документацией и поставил правильные коды, но ничего не сделал .. Вот одна из моих сущностей, например:
<?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(),
));
}
На других моих проектах это работает хорошо, но я не вижу, что я забыл.
У тебя есть идея?
Спасибо
Добавьте 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()));
}
}
Других решений пока нет …