我正在使用Validator来验证请求参数,并将有用的消息返回给公共API的用户。如果验证器失败,我返回一个视图:
if( $validator->fails() ){
$data = ['errors' => $validator->errors()->messages() ];
return response()->view('errors.412', $data, 412)
->header("HTTP/1.0 412 Precondition Failed", null);
} else {
...
}
观点......
<ul>
@foreach( $errors as $field )
@foreach( $field as $error )
<li>{{ $error }}</li>
@endforeach
@endforeach
</ul>
因为开发人员要使用这些消息,所以我希望它们具有技术性和特定性。因此,Laravel会自动从参数键中删除空间,这真令人讨厌。
对于消息:
'The :attribute field is required.'
Laravel回归:
车辆名称字段是必需的。
...但我希望更准确:
需要vehicle_name字段。
我找到的唯一解决方法是将以下行添加到/resources/lang/en/validation.php
:
'attributes' => [
'vehicle_name' => 'vehicle_name'
],
但是,我只需要在语言翻译文件中提供一堆相同的密钥对值,只是为了指示框架撤消不需要的行为。
有更好的方法吗?
答案 0 :(得分:1)
答案来自于我在laravel / internals上发布的功能请求评论GitHub repo https://github.com/laravel/internals
在使用视图显示错误时,我走错了路。对于技术用户,以JSON格式返回错误是最合适的格式,在该上下文中,参数的特定键是可见的:
private static void SetBearerToken(HttpClient client)
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", App.StoredToken);
}
因此,在验证失败的情况下,我更改了代码以返回JSON。
答案 1 :(得分:0)
您可以为每条规则使用自己的消息:
$data = $request->all();
$messages= [
'access_key.required' => 'access_key is required, I'm technical x)',
'access_key.max' => 'Yooo! calm down! you exceded max characters limit'
];
$rules = [
'access_key' => 'required|max:255',
];
return Validator::make($data,$rules, $messages);
如果您没有为某些规则提供消息,则会使用默认消息(替换您的下划线)。
所以这种方式就像为每个规则添加一个标记,但是让您有机会重写整个消息,并省略您不想提供特定消息的任何字段。