Laravel 5.5 FormRequest 自定义错误消息

Laravel 5.5 FormRequest 自定义错误消息

  使用FormRequest进行表单验证,就不用让验证逻辑和控制器里面的逻辑都混在一起。但在使用的时候呢,发现json错误返回的数据,与我们想要的有点差距。下面我给个例子:(不喜勿喷)

  

  在用ajax进行提交时,如果验证错了,那么他会返回

  

  

  如果是权限错了,他会返回

  

  但我想要的是

  

  那怎么办呢,其实很简单

  我们只需要在 App\Exceptions\Handler 里面重写两个函数就可以了

  

  添加上这两个函数,然后里面怎么定义,就看你了

  记得加上

  

       use Illuminate\Validation\ValidationException;
       use Illuminate\Auth\Access\AuthorizationException;

最后附上这两个文件的代码

LoginPost

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Auth\AuthenticationException;

class LoginPost extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize(){
        if($this->input(‘account‘)==‘[email protected]‘){
            return false;
        }
        return true;
    }

    protected function failedAuthorization()
    {
        throw new AuthenticationException(‘该帐号已被拉黑‘);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules(){
        return [
            ‘account‘=>[
                ‘required‘,
                ‘regex:/^1[34578][0-9]\d{4,8}|(\w)+(\.\w+)*@(\w)+((\.\w+)+)|[0-9a-zA-Z_]+$/‘,//验证为手机号,邮箱,或帐号
            ],
            ‘password‘=>‘required|between:6,18‘,//验证密码
        ];
    }

    public function messages(){
        return [
            ‘account.required‘ => ‘帐号不能为空‘,
            ‘account.regex‘ => ‘帐号不合法‘,
            ‘password.required‘  => ‘密码不能为空‘,
            ‘password.between‘  => ‘密码错误‘,
        ];
    }

Handler

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\AuthenticationException;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        ‘password‘,
        ‘password_confirmation‘,
    ];

    /**
     * Report or log an exception.
     *
     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }

    protected function unauthenticated($request, AuthenticationException $exception)
    {

        if($request->expectsJson()){
            $response=response()->json([
                    ‘status‘=>3,
                    ‘msg‘ => $exception->getMessage(),
                    ‘errors‘=>[],
                ], 200);
        }else{
            $response=redirect()->guest(route(‘login‘));
        }
        return $response;
    }

    protected function invalidJson($request, ValidationException $exception)
    {
        return response()->json([
            ‘status‘=>2,
            ‘msg‘ => $exception->getMessage(),
            ‘errors‘ => $exception->errors(),
        ], $exception->status);
    }
}

--------------------- 本文来自 断水流灬 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/duanshuiliu2017/article/details/78343408?utm_source=copy

原文地址:https://www.cnblogs.com/caicaizi/p/9728564.html

时间: 2024-09-29 19:33:01

Laravel 5.5 FormRequest 自定义错误消息的相关文章

Laravel 5.5 FormRequest 自定义表单请求验证类

1.把表单验证逻辑写在Controller中,这是最基础的方法,但是不好维护,如: 1 namespace App\Http\Controllers\Admin; 2 3 use Illuminate\Http\Request; 4 use App\Http\Controllers\Controller; 5 6 class MemberController extends Controller 7 { 8 // 登录模块 9 public function login (Request $re

ASP.NET MVC AJAX调用JsonResult方法并返回自定义错误信息

一.如何用AJAX调用JsonResult方法 比如FuckController中添加有个返回JsonResult类型的方法FuckJson(): public JsonResult FuckJson() { return new JsonResult() { Data = new List<string>() { "fuck", "shit" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }

自定义错误throw

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

Laravel之加密解密/日志/异常处理及自定义错误

一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try { $decrypted = Crypt::decrypt($encryptedValue);} catch (DecryptException $e) { //} 二.日志 1.配置文件config/app.php 中的debug 配置选项控制浏览器显示的错误详情数量.默认情况下,该配置选项被设置在.env 文件中的环境变量APP_DEBUG .对本地开发而言,你应该设置环境变量APP_DE

[原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:&quot;设备驱动程序软件未能成功安装&quot;

http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智能卡阅读器后时,Windows 尝试下载并安装智能卡 minidrivers 通过插服务卡.如果自定义的加密服务提供程序未在系统上安装智能卡的驱动程序在任一预配置位置,如 Windows 更新. WSUS 或 intranet 路径不可用,在通知区域中将收到以下错误消息: 未能成功安装设备驱动程序软

【WCF】自定义错误处理(IErrorHandler接口的用法)

当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调用中,action标头比较重要,它是塞在SOAP消息的Headers元素下面的,是消息头的一部分,action用来对服务操作进行定义的.用小学生能听懂的话说,就是某个服务操作的“学号”,通道层在消息调度时,会根据它来寻找要调用的Operation.记得老周举过例子,就好比你去王老板家里,你得知道王老

SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息

在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.springframework.org/schema/mvc" 一.作用: 1.会自动注册 RequestMappingHandlerMapping.RequestMappingHandlerAdapter 以及 ExceptionHandlerExceptionResolver 三个 Bean. 若配置该注

编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\b1b124ac\2fb984fc\App_global.asax.vbtifrrw.dll”--“拒绝访问。 ”

"/"应用程序中的服务器错误. 运行时错误 说明: 处理您的请求时发生异常.此外,对第一个异常执行自定义错误页时发生另一异常.已终止请求. "/"应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入输出文件"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP