流明封装。如何加载自定义validation.php 消息文件?

Posted

技术标签:

【中文标题】流明封装。如何加载自定义validation.php 消息文件?【英文标题】:Lumen package. How to load custom validation.php messages file? 【发布时间】:2020-04-07 19:54:24 【问题描述】:

我正在为 lumen 6.x 创建我的第一个包。我可以在我的包中使用来自/resources/lang/es/messages.php 的我自己翻译的消息,但由于某种原因,验证消息不起作用,事实上,/resources/lang/es/validation.php 被忽略了。

我猜这与验证器在控制器中的实现方式有关,因为翻译是从我的 Provider 正确加载的,因此我假设它也被加载了。

我的/resources/lang/es/validation.php 看起来像:

<?php

return [
    'required' => 'El campo :attribute es obligatorio.',
];

我在服务提供商中的启动功能:

public function boot()

   $this->loadTranslationsFrom(__DIR__.'/../resources/lang', 'locations');
   $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
   $this->loadRoutesFrom(__DIR__.'/../routes/web.php');

   // Publishing is only necessary when using the CLI.
   if ($this->app->runningInConsole()) 
       $this->bootForConsole();
   

Controller中的存储功能

public function store(Request $request)

    //
    $validator = Validator::make($request->all(), [
        'name' => 'required'
    ]);

    if ($validator->fails()) return $validator->errors();

    $resource = Country::create($request->toArray());

    return response()->json([
        'message'  => __('locations::messages.store_success'),
        'resource' => $resource
    ]);

在我的主要.env 流明文件中,我添加了APP_LOCALE=es,它非常适合翻译。

所以问题是我无法显示所需 name 字段的翻译消息。

顺便说一句,con 可以在我的测试 git 存储库中查看整个代码(请忽略州和城市的东西,因为它正在开发中)。 https://github.com/Imboga/Locations

提前致谢


编辑: 我也试过这个,但到目前为止没有运气

public function store(Request $request)
    
        //
        $this->validate($request, [
            'name' => 'required'
        ]);

        $resource = Country::create($request->toArray());

        return response()->json([
            'message'  => __('locations::messages.store_success'),
            'resource' => $resource
        ]);
    

【问题讨论】:

【参考方案1】:

我刚刚找到了解决方案。对于那些面临同样问题的人,我所做的是在引用本地化文件的validate() 方法中添加第三个和第四个参数:

public function update(Request $request)
    
        //
        $this->validate($request, [
            'name' => 'required'
        ], trans('locations::validation'), trans('locations::validation.attributes') );

        $resource = Country::findOrFail($request->id);
        $resource->update($request->toArray());

        return response()->json([
            'message'  => __('locations::messages.update_success'),
            'resource' => $resource
        ]);
    

第四个参数必须指向validation.php中的属性数组。

另一方面,通过此更改,我可以通过在 resources/lang/vendor/locations/ 中添加 validation.php 来覆盖主应用程序中的包 validation.php 文件

仅供参考,我的validation.php 看起来像:

<?php

return [
    'required' => 'El campo :attribute es obligatorio.',

    'attributes' => [
        'name' => 'Nombre'
    ],

];

不确定这是否是最好的方法,但它目前有效。任何改进将不胜感激。

【讨论】:

以上是关于流明封装。如何加载自定义validation.php 消息文件?的主要内容,如果未能解决你的问题,请参考以下文章

流明自定义验证响应

LayUi创建一个自定义通用模块

流明不可预测的输出

Unity自定义Atlas图集实现加载图集中的小图

NSMutableUrlRequest自定义封装网络请求

qt实现-给SQLITE添加自定义函数