2013-07-12 18 views
0

我有一個自定義驗證器,我想從驗證程序中訪問整個實體。Symfony2和loadValidatorMetadata - 訪問實體值

我發現類約束驗證器http://symfony.com/doc/current/cookbook/validation/custom_constraint.html#class-constraint-validator但我不知道如何使用它。

在哪裏設置驗證,目前我有它這樣的:

$metadata->addPropertyConstraint('doi', new IsDOI()); 

但這SI只爲參數,而不是整個類。 我無法真正理解symfony的例子。

+0

和你的問題是什麼,你不明白什麼? –

+0

我的問題是:如何訪問驗證器類中的其他實體值。問題是我不知道在哪裏設置驗證,以便能夠訪問其他實體值 –

回答

0

它做的,我需要做的唯一的事情就是設置驗證的實體類的頂部:

/** 
* Manuscript 
* 
* @IsDOI() 
* @ORM\Table(name="manuscripts") 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks 
* 
*/ 
class Manuscript 
{...} 
1

如果我們不能做到這一點的註釋:

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Knp\DoctrineBehaviors\Model as ORMBehaviors; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Component\Validator\Mapping\ClassMetadata; 

/* 
* Project 
* @ORM\Entity(repositoryClass="ProjectRepository") 
*/ 
class Project 
{ 
use ORMBehaviors\Translatable\Translatable; 

/* 
* => @ Assert\Valid not working on $translations, since tranlastion already defined by ORMBehaviors trait 
*/ 
public static function loadValidatorMetadata(ClassMetadata $metadata) 
{ 
    //$metadata->addConstraint(new Assert\Valid()); 
    $metadata->addPropertyConstraint('translations', new Assert\Valid()); 
}