我有一个StartDate字段和一个EndDate字段。两者都可能在今天或将来开始。有可能让它们在同一天开始,包括今天。我必须对这些进行验证。到目前为止,我所做的是:
'StartDate'=>'required|date_format:Y/m/d|after:yesterday',
'EndDate' => 'date_format:Y/m/d|after:yesterday',
我不知道怎么做的是,如果两个日期相等,作为第二个条件,验证为真。
有人能帮我吗?
验证日期的方法如下:
'start_date' => 'required|date',
'end_date' => 'required|date|after_or_equal:start_date'
EDIT这是Laravel 5.3的解决方案。在Laravel 5.4中,引入了一个规则after_or_equal
https://laravel.com/docs/5.4/validation rule-after-or-equal
我对我的web应用程序也有同样的需求。我通过使用以下rules
方法创建一个自定义Request
来解决它:
public function rules()
{
$rules = [
'start_date' => 'date_format:Y-m-d|after:today'
];
if ($this->request->has('start_date') && $this->request->get('start_date') != $this->request->get('end_date')) {
$rules['end_date'] = 'date_format:Y-m-d|after:start_date';
} else {
$rules['end_date'] = 'date_format:Y-m-d|after:today';
}
return $rules;
}
根据我的理解,我试图准备自定义验证规则,这可以帮助您满足您的要求。
当前下面提到的规则只检查开始日期是否在结束日期之前。
<?php
namespace App'Providers;
use Validator;
use Illuminate'Support'ServiceProvider;
class AppServiceProvider extends ServiceProvider{
public function boot(){
Validator::extend('date_after', function($attribute, $value, $parameters) {
return strtotime( $value ) > strtotime( $this->attributes[ $parameters[0] ] );
});
Validator::extend('date_equal', function($attribute, $value, $parameters) {
return strtotime( $value ) == strtotime( $this->attributes[ $parameters[0] ] );
});
}
}
?>
用法:
<?php
$inputs = array(
'start_date' => '2013-01-20',
'end_date' => '2013-01-15'
);
$rules = array(
'start_date' => 'required',
'end_date' => 'required|date_after:start_date'
);
$messages = array(
'date_after' => ":attribute must be date after Start Date."
);
$validation = Validator::make($inputs, $rules, $messages);
if( $validation->fails() )
{
echo '<pre>';
print_r($validation->errors);
echo '</pre>';
}
?>
然而,我没有用我的env测试代码…但我相信这对满足要求会有很大帮助。
请让我知道您的进一步要求,以便我为您的要求提供具体的解决方案。