对我来说,解决方案可以为我们提供 lukasgeiter,但不同的是,我们为 laravel 5.2 创建了一个带有自定义验证的类,就像这样。* 下一个示例是为第二个日期的日期范围添加验证必须等于或大于第一个
在 app/Providers 创建 ValidatorExtended.php
<?php
namespace App\Providers;
use Illuminate\Validation\Validator as IlluminateValidator;
class ValidatorExtended extends IlluminateValidator {
private $_custom_messages = array(
"after_or_equal" => ":attribute debe ser una fecha posterior o igual a
:date.",
);
public function __construct( $translator, $data, $rules, $messages = array(),
$customAttributes = array() ) {
parent::__construct( $translator, $data, $rules, $messages,
$customAttributes );
$this->_set_custom_stuff();
}
protected function _set_custom_stuff() {
//setup our custom error messages
$this->setCustomMessages( $this->_custom_messages );
}
/**
* La fecha final debe ser mayor o igual a la fecha inicial
*
* after_or_equal
*/
protected function validateAfterOrEqual( $attribute, $value, $parameters,
$validator) {
return strtotime($validator->getData()[$parameters[0]]) <=
strtotime($value);
}
} //end of class
好的。现在让我们创建服务提供者。在 app/Providers 中创建 ValidationExtensionServiceProvider.php,然后我们编写代码
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Validator;
class ValidationExtensionServiceProvider extends ServiceProvider {
public function register() {}
public function boot() {
$this->app->validator->resolver( function( $translator, $data, $rules,
$messages = array(), $customAttributes = array() ) {
return new ValidatorExtended( $translator, $data, $rules, $messages,
$customAttributes );
} );
}
} //end of class
现在我们告诉 Laravel 加载这个 Service Provider,在 config/app.php 的末尾添加 providers 数组,然后
//Servicio para extender validaciones
App\Providers\ValidationExtensionServiceProvider::class,
现在我们可以在函数规则的请求中使用此验证
public function rules()
{
return [
'fDesde' => 'date',
'fHasta' => 'date|after_or_equal:fDesde'
];
}
或在 Validator:make
$validator = Validator::make($request->all(), [
'fDesde' => 'date',
'fHasta' => 'date|after_or_equal:fDesde'
], $messages);
您必须注意,进行验证的方法的名称具有前缀 validate 并且是驼峰式风格的 validateAfterOrEqual 但是当您使用验证规则时,每个大写字母都将替换为下划线和小写字母。
所有这一切我都从https://www.sitepoint.com/data-validation-laravel-right-way-custom-validators//这里详细解释。感谢他们。