Php 如果另一个属性不是空的,则Symfony验证该属性

Php 如果另一个属性不是空的,则Symfony验证该属性,php,validation,symfony,Php,Validation,Symfony,我有课 Class SubjectSegment{ /** *@CustomAssert\MyCitizenshipNumber() */ private $citizenshipNumber; /** *@CustomAssert\MyDate() */ private $citizenshipNumberIssuedDate; } 我真正想做的是有效的citizenshipNumber如果citizenshipNumber存在 实现这一目标的最佳方法是什么 您可以通

我有课

Class SubjectSegment{ 
 /**
 *@CustomAssert\MyCitizenshipNumber()
 */ 
 private $citizenshipNumber; 
 /**
 *@CustomAssert\MyDate()
 */ 
 private $citizenshipNumberIssuedDate;
}
我真正想做的是有效的citizenshipNumber如果citizenshipNumber存在

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


您可以通过两种方式对此进行归档:

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

我需要的是,只有当citizenshipNumber不为空时才调用Constiaint MyDate。。类约束验证器。是否要在citizenshipNumber验证器中调用日期验证器?如果是这样,请看一看。如果这是您的解决方案,您可能必须在citizenshipNumber验证器中插入
验证器
组件。我真正需要的是转义@CustomAssert\MyDate when(null==$this->citizenshipNumber)。我使用的是symfony 2.6你对问题的评论回复
如果(null===$this->citizenshipNumber&&null===$this->citizenshipNumberseSueddate){//put$context->addViolation…}
在这两种情况下如果(null====$this->citizenshipNumber)和如果(null!=$this->citizenshipNumber){}@CustomAssert\MyDate()正在验证。是否有任何方法可以使用@Assert\Expression{this.citizenshipNumber!=null,@Assert\MyDate()}。。。如果我们在symfony 2中有这样的功能,那就太好了。因此,请删除您的
/**@CustomAssert\MyDate()*/
,并在自定义Assert类的
isCitizenDateValid
方法中添加验证。如果symfony在表达式中引入Assert,那就太好了。。代码将是自解释的。
$violations = $container->get('validator')->validate($segment = new SubjectSegmet(), null,$segment->getGroupSequence() );