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

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 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年前 评论

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