如果另一个属性不为空,则 Symfony 验证一个属性


Symfony validate a property if another property is not not blank

我有一个类

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

我真正想做的是有效的公民身份号码签发日期,如果公民身份号码存在...

实现这一目标的最佳方法是什么

嗨,

你应该看看 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);
        }
    }
}

您可以通过两种方式将其存档:

1) 回调验证器(通过类方法验证)

2) 使用类约束验证器

我建议第二种方法,因此您必须将验证器配置/设置为类范围,例如:

/**
 * @Annotation
 */
class MyCitizenshipNumber  extends Constraint {
...
    public function getTargets()
    {
        return self::CLASS_CONSTRAINT;
    }
} 

因此您可以访问所有类字段成员

请记住将验证器放在类定义之上,例如:

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

希望这个帮助

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() );