symfony2在字段中的值不相等

时间:2012-04-18 13:16:23

标签: php validation symfony

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

 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必须不同,因为它引用数据库中的文件。 在某种程度上,该怎么做?

1 个答案:

答案 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