关于使用中间件实现返回 JSON

我的项目中存在api和web服务。在$middleware中配置之后,无论是web还是api在产生异常都变成了返回json。如果优雅的配置仅对api生效。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3
 public function handle($request, Closure $next)
 {
       ...
       $response = $next($request);
       if (!$request->expectsJson()) {
            return $response;
       }
      ...
 }
4年前 评论
kinyou
/**
     * 异常接管处理
     * @param \Illuminate\Http\Request $request
     * @param Exception $exception
     * @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\Response
     * @throws Exception
     */
    public function render($request, Exception $exception)
    {
        $response = parent::render($request, $exception);

        list($api) = explode('/',trim($request->getRequestUri(),'/'));

        if (isset($api) && strtolower($api) == 'api') {
            $exceptionCode = $exception->getCode();

            return $this->formatResponse($response,$exceptionCode);
        }

        return $response;
    }
4年前 评论
/**
 * 需要被以Json返回的路由清单
 * @var array
 */
protected $routes = ['api'];

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    $thisRoute = strtolower(explode('/',trim($request->getRequestUri(),'/'))[0]);

    if (in_array($thisRoute, $this->routes) || $request->expectsJson())
    {
        $request->headers->set('Accept', 'application/json');
    }

    return $next($request);
}
4年前 评论

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