如何将Laravel默认验证语言文件路径自定义至指定目录
修改Laravel默认验证语言文件路径的方案
要把验证语言文件从project/resources/lang/en/validation.php移到project/resources/lang/admin/en/validation.php,可以用以下两种实用方法:
方法1:通过服务提供者自定义验证器
打开app/Providers/AppServiceProvider.php,在boot方法中注入验证器工厂,自定义解析逻辑来加载指定路径的语言文件:
use Illuminate\Validation\Factory; use Illuminate\Validation\Validator; public function boot(Factory $validatorFactory) { $validatorFactory->resolver(function ($translator, $data, $rules, $messages, $customAttributes) { // 将admin目录添加为语言命名空间 $translator->addNamespace('admin', resource_path('lang/admin')); return new Validator($translator, $data, $rules, $messages, $customAttributes); }); }
全局生效或按需指定
- 如果想全局默认使用这个路径,在
boot方法里追加:$this->app['translator']->setDefaultNamespace('admin'); - 如果只想在特定验证场景使用,调用验证器时指定命名空间:
$validator = Validator::make( $request->all(), $rules, [], ['*' => 'admin::validation'] // 绑定admin命名空间的验证语言 );
方法2:扩展翻译器添加自定义语言路径
在AppServiceProvider的register方法中,扩展Laravel的翻译器,把admin目录加入语言加载源:
use Illuminate\Translation\Translator; public function register() { $this->app->extend(Translator::class, function ($translator, $app) { $translator->addNamespace('admin', resource_path('lang/admin')); // 全局默认启用的话取消下面注释 // $translator->setDefaultNamespace('admin'); return $translator; }); }
验证修改结果
- 把原
validation.php的内容复制到project/resources/lang/admin/en/validation.php - 修改新文件里的某条提示(比如把
required的提示改成自定义内容) - 触发验证错误,检查返回的提示是否和新文件内容一致
内容的提问来源于stack exchange,提问作者user497660
相关产品推荐
相关产品推荐

