0

我有很多变量的类。其中很少是文件类型

 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 必须不同,因为它引用数据库中的文件。是某种方式,如何做到这一点?

4

1 回答 1

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 方法。

如果它变得更复杂或者您需要访问数据库,请查看自定义验证器

于 2012-04-18T14:04:55.260 回答