我有很多变量的类。其中很少是文件类型
class Proposal {
/**
* @ORM\ManyToOne(targetEntity="File")
* @ORM\JoinColumn(name="clientCommFile_id", referencedColumnName="id") */
private $clientCommFile;
/**
* @ORM\ManyToOne(targetEntity="File")
* @ORM\JoinColumn(name="contractFile_id", referencedColumnName="id")
*/
private $contractFile;
/**
* @ORM\ManyToOne(targetEntity="File")
* @ORM\JoinColumn(name="proposalFile_id", referencedColumnName="id")
*/
private $proposalFile;
我需要创建一些验证规则来验证哪些将检查文件的ID。 ID必须不同,因为它引用数据库中的文件。 在某种程度上,该怎么做?
答案 0 :(得分:1)
您希望clientCommFile,contractFile和proposalFile有所不同吗?假设一个人可以比较对象,这就是它的方式:
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;
/**
* @Assert\Callback(methods={"areFilesValid"})
*/
class Proposal {
// ..
public function areFilesValid(ExecutionContext $context) {
if($this->clientCommFile != null && $this->clientCommFile->equals($this->contractFile)){
$propertyPath = $context->getPropertyPath() . '.options';
$context->setPropertyPath($propertyPath);
$context->addViolation('ClientCommFile and ContractFile are equal', array(), null);
}
}
}
当然,您必须在对象上实现equals方法。
如果它变得更复杂或者您需要访问数据库,请查看custom validators