我有一个简单的实体类型“城市”
class City
{
use GeoTrait;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
...
}
你可以看到它使用Trait,看起来像这样
use AppBundle\Validator\Constraint as AppConstraint;
/**
* @AppConstraint\IsDuplicateLocation
* @AppConstraint\IsLocation
*/
trait GeoTrait
{
/**
* @var string
*
* @ORM\Column(name="geoLat", type="decimal", nullable = true, precision=9, scale=6)
*/
private $geoLat;
/**
* @var string
*
* @ORM\Column(name="geoLng", type="decimal", nullable = true, precision=9, scale=6)
*/
private $geoLng;
}
现在,如果我创建一个新实体并尝试使用验证器服务对其进行虚拟化,那么它似乎不会验证我的自定义类约束。
如果我向特征添加字段约束,则验证工作正常,但不适用于类约束。为什么这不起作用?
答案 0 :(得分:0)
Trait不是类,因此您无法在自定义Constraint“getTargets()”方法中将其作为目标。
尝试将您的类约束添加到City类
/**
* @AppConstraint\IsDuplicateLocation
* @AppConstraint\IsLocation
*/
class City
{
...
}