Laravel针对不同的命名空间/路由组使用了不同的404页面

我在Laravel中有三个不同的Http名称空间:Frontend,Backend和API . 每个路由组还有一个不同的命名空间 . 以下是RouteServiceProvider的示例代码(前端路由组):

protected function mapFrontendRoutes(Router $router) {
    $router->group([
        'namespace' => 'App\Http\Controllers\Frontend',
        'middleware' => 'web',
    ], function ($router) {
        require app_path('Http/Routes/frontend.php');
    });
}

现在,我想为这些命名空间/路由组设置三个不同的404页面:

  • API - 以JSON格式显示404响应

  • 前端 - errors / 404.blade.php

  • 后端 - 在backend / errors / 404.blade.php中有一个单独的视图

我该如何创建这些?我一直在网上搜索,并没有发现任何相关的事情 .

Laravel版本:5.2

回答(1)

3 years ago

您可以通过在 App\Exceptions\Handler 中覆盖(添加) renderHttpException 方法来实现此目的 . 该方法接收 HttpException as参数并返回响应 .

像这样的东西:

protected function renderHttpException(HttpException $e) {

    $status = $e->getStatusCode();

    if (Request::ajax() || Request::wantsJson()) {
        return response()->json([], $status);
    } else if(Request::is('/backend/*')) { //Chane to your backend your !
        return response()->view("backend/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }else {
        return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }

}