【发布时间】:2015-02-21 17:49:23
【问题描述】:
我正在尝试让 Symfony 的 UniqueEntity 验证器为我的 Doctrine 实体工作。 Symfony 验证器已经连接并工作,但是来自 Symfony\Bridge 的 UniqueEntity 更具挑战性,显示此错误:
PHP Fatal error: Class 'doctrine.orm.validator.unique' not found in /app/vendor/symfony/validator/Symfony/Component/Validator/ConstraintValidatorFactory.php on line 46
看起来 ValidatorFactory 正在从 Symfony 容器请求 UniqueEntity 验证器,而我没有,因为我没有使用全栈 symfony。
我的实体如下所示:
<?php
namespace App\Model;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints as AssertDoctrine;
/**
* User
*
* @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")
* @AssertDoctrine\UniqueEntity("username")
*/
class User extends AbstractEntity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=45, unique=true, nullable=false)
* @Assert\Length(min=3, max=45)
*/
protected $username;
/** ... */
}
其中 AbstractEntity 是一个映射超类,包括为所有实体提供验证功能的 Trait:
<?php
namespace App\Model\Traits;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Validation;
use App\Utility\Exception\ConstraintViolationException;
/**
* A trait enabling validation of Doctrine entities to ensure invalid entities
* don't reach the persistence layer.
*/
trait ValidatorAwareTrait
{
public function validate()
{
$validator = Validation::createValidatorBuilder()
->enableAnnotationMapping()
->getValidator();
$violations = $validator->validate($this);
// Count is used as this is not an array but a ConstraintViolationList
if (count($violations) !== 0) {
$message = $violations[0]->getPropertyPath() . ': ' . $violations[0]->getMessage();
throw new ConstraintViolationException($message);
}
return true;
}
}
【问题讨论】:
标签: validation symfony doctrine unique