对我而言,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() {
$this->setCustomMessages( $this->_custom_messages );
}
protected function validateAfterOrEqual( $attribute, $value, $parameters,
$validator) {
return strtotime($validator->getData()[$parameters[0]]) <=
strtotime($value);
}
}
好的,现在让我们创建服务提供者。在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 );
} );
}
}
现在我们需要告诉 Laravel 加载这个服务提供者,在 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//中获取了所有这些详细信息。感谢他们。