2012-04-18 63 views
0

我有很多变量的类。少数是文件类型symfony2不等于字段值

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。 ids必须不同,因为它引用数据库中的文件。 有一些办法,该怎么做?

回答

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

+0

数据库访问这里不需要。我可以只是comapare以某种方式我从窗体中获得的文件ID。我的意图是:将ID添加到数组中,order asc和comare i-1索引等于i索引。取而代之的是回调方法,我使用了getter方法,但它不起作用 – 2012-04-18 14:31:05