我真正应该做的是设置我的替换器类似于这样:
Validator::replacer('dateInYear', 'App\CustomValidators@replaceDateInYear');
dateInYear
名称对应着我设置的自定义验证规则的名称。不过,最终我所采取的方法是扩展验证器类,这样我就不必再声明每个自定义规则和替换器了。我的验证器类现在看起来大致如下:
<?php
namespace App\Services;
use Carbon\Carbon;
use \Illuminate\Validation\Validator;
class CustomValidator extends Validator
{
protected function validateDateInYear($attribute, $value, $parameters, $validator)
{
$date = Carbon::createFromFormat('m/d/Y', $value)->startOfDay();
if ($date->year == $parameters[0]) {
return true;
}
return false;
}
protected function replaceDateInYear($message, $attribute, $rule, $parameters)
{
return str_replace([':year'], $parameters, $message);
}
}
这让我大部分时间可以不用更改我的AppServiceProvider文件,只需要在任何服务提供者中注册新的验证类。
Laravel文档对于替换器需要做什么的解释非常缺乏,所以我希望这能帮助到日后的某个人。
$validator->addReplacer('dateInYear', 'App\Services\CustomValidator@replaceDateInYear');
- ironic_ollins