最终成果

使得在每个控制器中都可以直接使用$this->success()和$this->fail()

具体步骤

  • 新建MyResponse.php

在Http目录下,新建Responses文件夹,在文件夹下新建MyResponse.php文件

<?php


namespace App\Http\Responses;

// trai 是PHP为了实现代码复用的一种语法,自身不能被实例化,只能在其他的Class中被use,一旦被class use,那个class就有了这个trai中的方法和属性
trait MyResponse
{

    /**
     * @param  string  $msg
     * @param  array  $data
     * @return \Illuminate\Http\JsonResponse
     */
    protected function success(string $msg = '成功', array $data = [])
    {
        return response()->json(
            [
                'status' => 'success',
                'msg' => $msg,
                'data' => $data,
            ]
        );
    }

    /**
     * @param  string  $msg
     * @param  array  $data
     * @return \Illuminate\Http\JsonResponse
     */
    protected function fail(string $msg = '失败', array $data = [])
    {
        return response()->json(
            [
                'status' => 'fail',
                'msg' => $msg,
                'data' => $data,
            ]
        );
    }
}
  • 在Controller控制器中引入这个Trait

appHttpController.php

use App\Http\Responses\MyResponse;
// 记得use MyResponse
class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests, MyResponse;
}
  • 现在在所有的Controller中都可以使用$this->success()和$this->fail()方法来返回json数据了
if (Auth::attempt($input)) {
            //  只要进来就是验证且登录成功了,只要返回登录成功的消息就可以了
            return $this->success('登录成功');
        } else {
            return $this->fail('用户名或密码错误,登录失败');
        }
  • 原理分析

因为所有的Controller都继承了Controller,而自己写的这个Trait又被Controller use

Last modification:July 13th, 2020 at 12:36 pm
哎呀呀,大家随意,随意就好!