我有两个实体Candidate和ProgramType具有多对一关系
Candidate.php:
/**
* @ORM\ManyToOne(targetEntity="ProgramType", inversedBy="candidates")
* @ORM\JoinColumn(name="program_type", referencedColumnName="id")
* @Assert\NotBlank(message="lead.programtype.not_blank",groups={"registration","profile"})
* @Assert\NotEqualTo("1",groups={"registration","profile"})
*/
public $programtype;
ProgramType.php:
/**
* One ProgramType has Many Candidates.
* @ORM\OneToMany(targetEntity="Candidate", mappedBy="programtype")
*/
private $candidates;
public function __construct() {
$this->candidates = new ArrayCollection();
}
问题是这一行@Assert\NotEqualTo("1",groups={"registration","profile"})
。断言声明不起作用。任何想法?
答案 0 :(得分:0)
您的programType
位于ProgramType
类型的对象上,因此" 1"是一个字符串,或一个数字...或任何PHP想要它。
来自http://php.net/manual/en/language.operators.comparison.php
$ a!= $ b如果$ a在类型后不等于$ b,则不等于TRUE 杂耍。
然后你相信php的类型杂耍。
您应该使用Expression validator
执行此类操作@Assert\Expression(
expression="this.programTypeIsNotEqualTo()",
groups={"registration","profile"}
)
并实施
public function programTypeIsNotEqualTo() {
return $this->programType->getId()!==1;
}
在您的实体中。
更新:表达式验证器已在Symfony 2.4中引入,因此在2.3中您可以使用实体顶部的Callback验证器
/**
* @Assert\Callback(
* methods={"programTypeIsNotEqualTo"}
* groups={"registration","profile"}
* )
* @Entity()
*
*/
class XXXX {
}