Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Symfony验证器验证条令实体_Php_Validation_Symfony_Doctrine - Fatal编程技术网

Php 使用Symfony验证器验证条令实体

Php 使用Symfony验证器验证条令实体,php,validation,symfony,doctrine,Php,Validation,Symfony,Doctrine,我很难将Symfony验证器组件与条令集成(独立,不使用完整的Symfony框架)。到目前为止,我已经成功地在Doctrine的AnnotationRegistry中注册了注释约束,并将其挂接到生命周期回调中,但是我如何实际检索验证器并在生命周期方法中解析注释呢 我的实体如下所示: <?php namespace App\Model; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints

我很难将Symfony验证器组件与条令集成(独立,不使用完整的Symfony框架)。到目前为止,我已经成功地在Doctrine的AnnotationRegistry中注册了注释约束,并将其挂接到生命周期回调中,但是我如何实际检索验证器并在生命周期方法中解析注释呢

我的实体如下所示:

<?php
namespace App\Model;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * User
 *
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="users", uniqueConstraints={@ORM\UniqueConstraint(name="id_UNIQUE", columns={"id"}), @ORM\UniqueConstraint(name="username_UNIQUE", columns={"username"})})
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User extends AbstractEntity
{
    /**
     * @ORM\PreUpdate
     * @ORM\PrePersist
     */
    public function validate()
    {
        // how do I retrieve the validator?

        // $validator->validate($this);
    }

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=45, nullable=false)
     * @Assert\Length(min=3, max=45)
     */
    protected $username;

    /** ... */
}

由于您没有使用symfony fullstack,您应该手动创建一个验证程序服务来使用它

验证器

$validator = Validation::createValidatorBuilder()
    ->enableAnnotationMapping()
    ->getValidator();

$user = new User('John Doe', 'john@example.com');

$violations = $validator->validate($user);

这很有效,谢谢!但是,如果由于验证失败而在生命周期回调中引发异常,则实体管理器将关闭。有没有办法防止这种情况?目前,我刚刚删除了生命周期回调,并在我的repositorie的save方法中手动验证实体,该方法似乎有效,但我认为它不是最优雅的解决方案。我不确定这是否会很晚,但只需使用try..catch手动处理。期望出现一些验证异常并正确处理。
$validator = Validation::createValidatorBuilder()
    ->enableAnnotationMapping()
    ->getValidator();

$user = new User('John Doe', 'john@example.com');

$violations = $validator->validate($user);