流明封装。如何加载自定义 validation.php 消息文件?
Lumen package. How to load custom validation.php messages file?
我正在为 lumen 6.x 创建我的第一个包。我可以在我的包中使用来自 /resources/lang/es/messages.php
的我自己翻译的消息,但出于某种原因,验证消息不起作用,事实上,/resources/lang/es/validation.php
被忽略了。
我猜这与验证器在控制器中的实现方式有关,因为翻译是从我的提供商正确加载的,因此我假设它也被加载了。
我的 /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中的store函数
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
]);
}
我刚刚找到了解决方案。对于那些面临同样问题的人,我所做的是在引用本地化文件的 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'
],
];
不确定这是否是最好的方法,但到目前为止它是有效的。如有任何改进,我们将不胜感激。
我正在为 lumen 6.x 创建我的第一个包。我可以在我的包中使用来自 /resources/lang/es/messages.php
的我自己翻译的消息,但出于某种原因,验证消息不起作用,事实上,/resources/lang/es/validation.php
被忽略了。
我猜这与验证器在控制器中的实现方式有关,因为翻译是从我的提供商正确加载的,因此我假设它也被加载了。
我的 /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中的store函数
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
]);
}
我刚刚找到了解决方案。对于那些面临同样问题的人,我所做的是在引用本地化文件的 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'
],
];
不确定这是否是最好的方法,但到目前为止它是有效的。如有任何改进,我们将不胜感激。