如何从控制器方法验证返回自定义错误消息

Posted

技术标签:

【中文标题】如何从控制器方法验证返回自定义错误消息【英文标题】:How to return custom error message from controller method validation 【发布时间】:2017-02-25 07:19:49 【问题描述】:

如何使用这种格式返回自定义错误消息?

$this->validate($request, [
  'thing' => 'required'
]);

【问题讨论】:

【参考方案1】:

要获得自定义错误消息,您需要在第三个参数上传递自定义错误消息,就像那样

$this->validate(
    $request, 
    ['thing' => 'required'],
    ['thing.required' => 'this is my custom error message for required']
);

【讨论】:

二维数组如何添加自定义消息? 我不确定为什么文档中没有更清楚地说明这一点。这是一种简单的方法,适用于 Laravel 7。谢谢!【参考方案2】:

对于多个字段、角色和字段角色特定的消息

$this->validate(
        $request, 
        [   
            'uEmail'             => 'required|unique:members',
            'uPassword'          => 'required|min:8'
        ],
        [   
            'uEmail.required'    => 'Please Provide Your Email Address For Better Communication, Thank You.',
            'uEmail.unique'      => 'Sorry, This Email Address Is Already Used By Another User. Please Try With Different One, Thank You.',
            'uPassword.required' => 'Password Is Required For Your Information Safety, Thank You.',
            'uPassword.min'      => 'Password Length Should Be More Than 8 Character Or Digit Or Mix, Thank You.',
        ]
    );

【讨论】:

谢谢,它帮助我在 laravel 5.5 中添加自定义错误消息... :-)【参考方案3】:

https://laravel.com/docs/5.3/validation#working-with-error-messages

$messages = [
    'required' => 'The :attribute field is required.',
];

$validator = Validator::make($input, $rules, $messages);

“在大多数情况下,您可能会在语言文件中指定您的自定义消息,而不是直接将它们传递给验证器。为此,请将您的消息添加到 resources/lang/xx/validation.php 语言中的自定义数组文件。”

【讨论】:

【参考方案4】:

您需要先在要显示错误消息的视图页面中添加以下行:

<div class="row">
        <div class="col-md-4 col-md-offset-4 error">
            <ul>
                @foreach($errors->all() as $error)
                    <li>$error</li>
                @endforeach
            </ul>
        </div>
    </div>

这是一个演示控制器,错误消息将显示在该页面上:

public function saveUser(Request $request)

 
     $this->validate($request,[
        'name' => 'required',          
        'email' => 'required|unique:users',          
        ]);
  $user=new User();
  $user->name= $request->Input(['name']);
  $user->email=$request->Input(['email']);
  $user->save();
  return redirect('getUser');
 

详情可以关注Blog post。 除此之外,你也可以关注 laravel 官方文档Validation。

【讨论】:

我说的是可以在这里完成的自定义消息... $messages = [ 'required' => 'The :attribute field is required.', ]; $validator = Validator::make($input, $rules, $messages); 但使用 $this->validate() @cmac 完全一样。控制器中validate 的签名(通过ValidatesRequests 类)是void validate(Request $request, array $rules, array $messages = array(), array $customAttributes = array())

以上是关于如何从控制器方法验证返回自定义错误消息的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 GraphQL 查询验证错误消息

如何根据 Angular 2 中的自定义验证规则显示错误消息?

Rails 4.2 ActionController:BadRequest自定义错误消息

如何将参数传递给 JHipster 中的自定义错误消息?

Django,自定义身份验证登录。身份验证失败时如何显示错误消息?

带有错误消息的自定义验证器的 angularjs 指令