在Laravel 5.2中,为什么自定义验证器无法获得已更改字段的正确值?
我使用这些定制的验证器将在Laravel 5.2中,为什么自定义验证器无法获得已更改字段的正确值?,laravel,date,validation,Laravel,Date,Validation,我使用这些定制的验证器将在_或_equal之前用作开始日期,将在_或_equal之后用作结束日期。问题是,例如,我故意使开始日期晚于结束日期,并且在字段下方显示了一个错误。我单击结束日期,其错误也会显示,但我将其更改为开始日期之后的有效日期。它变绿了。但是开始日期的错误仍然存在,即使我点击了它的字段。这就好像在开始日期使用的before_或_equal仍然读取前一个结束日期 我必须将开始日期更改为其他日期,以使其错误消失。现在发生这样的事是不对的 我做错了什么 Validator::extend
在_或_equal
之前用作开始日期,将在_或_equal
之后用作结束日期。问题是,例如,我故意使开始日期晚于结束日期,并且在字段下方显示了一个错误。我单击结束日期,其错误也会显示,但我将其更改为开始日期之后的有效日期。它变绿了。但是开始日期的错误仍然存在,即使我点击了它的字段。这就好像在开始日期使用的before_或_equal
仍然读取前一个结束日期
我必须将开始日期更改为其他日期,以使其错误消失。现在发生这样的事是不对的
我做错了什么
Validator::extend('after_or_equal', function($attribute, $value, $parameters, $validator) {
$validator->addReplacer('after_or_equal', function ($message, $attribute, $rule, $parameters) use ($value) {
$startDateName = $parameters[0];
return str_replace(':start_date', request($startDateName), $message);
});
return strtotime($validator->getData()[$parameters[0]]) <= strtotime($value);
});
Validator::extend('before_or_equal', function($attribute, $value, $parameters, $validator) {
$validator->addReplacer('before_or_equal', function ($message, $attribute, $rule, $parameters) use ($value) {
$endDateName = $parameters[0];
return str_replace(':end_date', request($endDateName), $message);
});
$endDateName = $parameters[0];
if(request($endDateName) != null) {
return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value);
} else {
return true;
}
});
Validator::extend('after_or_equal',函数($attribute、$value、$parameters、$Validator){
$validator->addReplacer('after_or_equal',函数($message,$attribute,$rule,$parameters)使用($value){
$startDateName=$parameters[0];
返回str_replace(':start_date',request($startDateName),$message);
});
返回strotime($validator->getData()[$parameters[0]])addReplacer('before_或_equal',函数($message,$attribute,$rule,$parameters)use($value){
$endDateName=$parameters[0];
返回str_replace(':end_date',request($endDateName),$message);
});
$endDateName=$parameters[0];
if(请求($endDateName)!=null){
返回strottime($validator->getData()[$parameters[0]])>=strottime($value);
}否则{
返回true;
}
});
我可能有点误解,但听起来你说的是实时的Javascript验证——事情变绿了,当你点击某个地方时会出现错误等等。这是一些JS验证,与你展示的Laravel/PHP验证代码完全无关。如果我有误解,请澄清。但为什么如果我删除了添加到请求PHP文件中的自定义“前/后等于”和“前/后等于”规则,则不再显示错误,并且我可以自由选择无效的“到/自”日期?这难道不意味着在我描述的情况下正在使用定制的验证器吗?或者定制的验证器和JS验证之间有交互作用吗?我发现我正在处理的项目使用proengsoft/laravel jsvalidation,所以这确实是一个JS验证问题。我仍然不知道PHP端的定制验证器是如何被用来创建JS验证的,因为在我的故事中,似乎有一个连接。