Symfony checks a property if another property is not empty

I have a class

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

what I really want to do is valid citizenship NumberIssuedDate if citizenship is present ...

What is the best way to achieve this?

+4
source share
3 answers

Hi, you should take a look at 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);
        }
    }
}
+3
source
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; 
    } 
}

validator

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

:

1) ( )

2)

, / , :

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

...

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

} 

, :

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

 private $citizenshipNumber; 

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

+2
source

All Articles