2015-02-02 2 views
4

내가 가진 클래스심포니는 속성을 확인

Class SubjectSegment{ 
/** 
*@CustomAssert\MyCitizenshipNumber() 
*/ 
private $citizenshipNumber; 
/** 
*@CustomAssert\MyDate() 
*/ 
private $citizenshipNumberIssuedDate; 
} 

citizenshipNumber가있는 경우 내가 정말로 원하는 것은 유효 citizenshipNumberIssuedDate입니다 ... 최고입니다 무엇

방법은 당신이에 보일 것이

답변

3

안녕을 달성하기 위해 http://symfony.com/doc/current/reference/constraints/Callback.html

use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Component\Validator\ExecutionContext; 

/** 
* @Assert\Callback(methods={"isCitizenDateValid"}) 
*/ 

Class SubjectSegment{ 
    /** 
    *@CustomAssert\MyCitizenshipNumber() 
    */ 
    private $citizenshipNumber; 
    /** 
    *@CustomAssert\MyDate() 
    */ 
    private $citizenshipNumberIssuedDate; 

    public function isCitizenDateValid(ExecutionContext $context) 
    { 
     //Do your validation here for your exemple : 
     if(null === $this->citizenshipNumber && null === $this->citizenshipNumberIssuedDate) { 
      $context->addViolationAtSubPath('citizenshipNumberIssuedDate', 'The date is required', array(), null); 
     } 
    } 
} 
,
+0

무엇 난 정말 필요한 것은 @CustomAssert \를 탈출하는 것입니다 MyDate when (null == $ this-> citizenshipNumber). 심포니 2.6을 사용하고 있습니다. – Madhab452

+0

질문에 대한 귀하의 코멘트 답신'if (null === $ this-> citizenshipNumber && null === $ this-> citizenshipNumberIssuedDate) {// put $ context-> addViolation ...}' – pietro

+0

두 경우 모두 (null === $ this-> citizenshipNumber) if (null! = $ this-> citizenshipNumber) {} @CustomAssert \ MyDate()가 유효한지 확인하십시오. – Madhab452

2

당신은 두 가지 방법으로이 문제를 보관할 수 있습니다 : 나는 두 번째 방법을 제안 class constraint validator

와 클래스 메소드에 의해 검증

1) 콜백 검사기()

2), 당신이 구성해야하므로/같은 클래스 범위에 대한 검증을 설정 : 모든 클래스의 필드 멤버에 액세스 할 수 있도록

/** 
* @Annotation 
*/ 
class MyCitizenshipNumber extends Constraint { 

... 

    public function getTargets() 
    { 
     return self::CLASS_CONSTRAINT; 
    } 

} 

같은 클래스 정의의 상단에 검증을 넣어 기억

/** 
*@CustomAssert\MyCitizenshipNumber() 
*/ 
Class SubjectSegment{ 

private $citizenshipNumber; 

/** 
*@CustomAssert\MyDate() 
*/ 
private $citizenshipNumberIssuedDate; 
} 

희망이 도움

+0

내가 constridaint MyDate를 호출해야만 citizenshipNumber가 비어 있지 않은 경우에만 .. 클래스 제약 검사기. – Madhab452

+0

citizenshipNumber 검사기에서 날짜 유효성 검사기에 전화 하시겠습니까? 그렇다면 [this] (http://stackoverflow.com/questions/17337427/symfony2-call-emailvalidator-inside-a-custom-validator)를 살펴보십시오. 이것이 해결책이라면 citizenshipNumber validator 안에 validator 컴포넌트를 삽입해야합니다. – Matteo

3
Class SubjectSegment{ 

    /** 
    *@CustomAssert\MyCitizenshipNumber() 
    */ 
    private $citizenshipNumber; 

    /** 
    *@CustomAssert\MyDate(group={"is_my_citizenship_number"}) 
    */ 
    private $citizenshipNumberIssuedDate; 

    public function getGroupSequence(){ 
     $sequence = ['SubjectSegment']; 
     if(null != $this->CitizenshipNumber){ 
      $sequence[] = 'is_my_citizenship_number'; 
     } 
     return $sequence; 
    } 
} 

검증 :

$violations = $container->get('validator')->validate($segment = new SubjectSegmet(), null,$segment->getGroupSequence()); 
+0

symfony가 Expression 내에서 Assert를 도입하면 좋을 것입니다. 코드는 자명 할 것입니다. – Madhab452

관련 문제