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 に答える