自己写了一个简单的后置中间件统一格式

使用后置中间件来返回接口

自己写了个统一接口返回

<?php

namespace App\Http\Middleware;

use Closure;

/**
 * 设置一个后置中间件统一返回格式,去除null值
 *
 * Class Response
 */
class Response
{
    private $codeDefault = self::SUCCESS;
    private $messageDefault = self::SUCCESS_MSG;

    const SUCCESS = 200;
    const WARNING = 300;
    const ERROR = 400;
    const SUCCESS_MSG = '返回成功';

    public function handle($request, Closure $next)
    {
        $response = $next($request);
        $response = $this->formatData($response->original);

        return response()->json($response);
    }

    /**
     * 格式化数据
     *
     * @param $response
     * @return array
     */
    private function formatData($response)
    {
        if (isset($response['data'])) {
            $response['data'] = $this->isArray($response['data']);
            $response['data'] = $this->nullTransform($response['data']);
        }

        $message = isset($response['message']) ? $response['message'] : '';
        $code = isset($response['code']) ? $response['code'] : $this->codeDefault;
        $data = isset($response['data']) ? $response['data'] : $this->messageDefault;

        return ['code' => $code, 'message' => $message, 'data' => $data];
    }

    /**
     * 去除null值
     *
     * @param $response
     * @return mixed
     */
    private function nullTransform($response)
    {
        $response = $this->isArray($response);
        array_walk_recursive($response, function (&$val) {
            if ($val === null) {
                $val = '';
            }
        });
        return $response;
    }

    /**
     * 判断变量是否数组
     *
     * @param $response
     * @return mixed
     */
    private function isArray($response)
    {
        if(!is_array($response)){
            return $response->toArray();
        }
        return $response;
    }
}

控制器只需要直接返回数组,路由引入该中间件。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!