2012-04-18 8 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を検査する検証ルールを作成する必要があります。 IDは、データベース内のファイルを参照するため、異なる必要があります。 これはどうやって行うのですか?

答えて

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

データベースを見てみましょう。フォームから取得したファイルIDをどうにかしてコンパイルできますか?私の意図は:idsを配列に追加し、ascを注文し、i-1 indexがi indexと等しいかどうかを調べる。代わりにコールバックメソッド、私はゲッターメソッドを使用しましたが、それは動作しません –

関連する問題