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()));
        }
    }