Symfony 3 - 验证约束不起作用
Symfony 3 - Validations Constraints doesnt work
我的验证有问题,none 我的验证有效。
我按照文档进行操作,并输入了正确的代码,但什么也没做。例如,这是我的实体之一:
<?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()));
}
}
我的验证有问题,none 我的验证有效。 我按照文档进行操作,并输入了正确的代码,但什么也没做。例如,这是我的实体之一:
<?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()));
}
}