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

问题描述 投票:0回答:1

我正在为流明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();
   }
}

控制器中的存储功能

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字段的翻译后的消息。

BTW,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
        ]);
    }
laravel validation package translation lumen
1个回答
0
投票

我刚刚找到了解决方案。对于那些面临相同问题的人,我要做的是在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中的属性数组。

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

FYI,我的validation.php看起来像:

<?php

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

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

];

不确定这是否是最好的方法,但是到目前为止它是可行的。任何改进将不胜感激。

© www.soinside.com 2019 - 2024. All rights reserved.