使用Yii2,我想在ActiveForm中使用AJAX自定义验证功能来同时验证2个相关字段。这意味着,如果验证失败,则我想在ActiveForm的两个字段中都出现错误,反之亦然,如果验证通过,我希望在ActiveForm中清除这两个错误。
当前,我创建了一个自定义验证功能,该功能适用于两个字段。但是,它只会仅在我更改的字段而不是其他相关字段上触发/清除错误。
在我的模型中,我有以下规则:
public function rules()
{
return [[['start_date', 'end_date'], 'isStartDateEarlierThanOrEqualToEndDate', 'skipOnError' => 'false']];
}
这是我创建的自定义函数:
public function isStartDateEarlierThanOrEqualToEndDate($attribute_name, $params)
{
if( $this->start_date && $this->end_date && $this->start_date > $this->end_date ) {
$this->addError($attribute_name, 'Start date must be earlier than or equal to end date.');
return false;
}
}
我试图更改自定义功能,以明确地在两个字段上都添加错误,但是它也不起作用。代码如下:
public function isStartDateEarlierThanOrEqualToEndDate($attribute_name, $params)
{
if( $this->start_date && $this->end_date && $this->start_date > $this->end_date ) {
$this->addError('start_date', 'Start date must be earlier than or equal to end date.');
$this->addError('end_date', 'Start date must be earlier than or equal to end date.');
return false;
}
}
期望: 如果我将start_date设置为2019年1月5日。那么,我将end_date设置为2019年1月3日。错误消息将仅在end_date字段中显示。我想要start_date和end_date的错误消息。 同样,当我将start_date固定为之后的2019年1月2日时,end_date上的错误消息也不会清除。我希望任何一个字段中的任何更改都会在两个字段中产生错误,或者清除两个字段中的错误。
感谢您的帮助。 谢谢