停止Laravel验证,使用以下属性替换下划线:属性占位符

时间:2017-10-18 10:31:10

标签: laravel laravel-5

我正在使用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'
],

但是,我只需要在语言翻译文件中提供一堆相同的密钥对值,只是为了指示框架撤消不需要的行为。

有更好的方法吗?

2 个答案:

答案 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);

如果您没有为某些规则提供消息,则会使用默认消息(替换您的下划线)。

所以这种方式就像为每个规则添加一个标记,但是让您有机会重写整个消息,并省略您不想提供特定消息的任何字段。