Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel 5.2中,为什么自定义验证器无法获得已更改字段的正确值?_Laravel_Date_Validation - Fatal编程技术网

在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验证的,因为在我的故事中,似乎有一个连接。