是否可以在laravel中为后端和前端创建单独的错误页面?

时间:2019-01-07 08:59:03

标签: php laravel exception-handling

我目前正在公开查看该项目的工作,即出于管理目的的前端和后端。

遇到404错误时,我想为后端和前端分别显示错误页面。

可以在laravel中做吗?

还是我们也可以基于名称空间创建错误页面?

目前,我在/resources/views/errors/目录中有错误页面。

任何建议都值得赞赏。如果需要更多信息,请随时询问。

2 个答案:

答案 0 :(得分:0)

可能不是最佳选择。

您可以在Exception Handler的render()方法中基于当前路径来分离视图。

app / Exceptions / Handler.php:

public function render($request, Exception $exception)
{
    if ($exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
        if(str_is('/admin*', request()->path())){
            return response()->view('errors.backend.404', [], 404);
        } else {
            return response()->view('errors.frontend.404', [], 404);
        }
    }

    return parent::render($request, $exception);
}

答案 1 :(得分:0)

我知道这已经是一岁了,但是只是基于这个答案。我建议更好的方法不是在您的render方法中编写if语句,而是拉下getHttpExceptionView()方法并将其覆盖。

(将此代码段添加到您的App\Exceptions\Handler.php中-它会覆盖父类中的内容)

/**
 * Get the view used to render HTTP exceptions.
 *
 * @param  \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface  $e
 * @return string
 */
protected function getHttpExceptionView(HttpExceptionInterface $e)
{
    $adminErrorView = "admin.errors.{$e->getStatusCode()}";

    if (Str::is('admin*', request()->path())) {
        if (view()->exists($adminErrorView)) {
            return $adminErrorView;
        }
    }

    return "errors::{$e->getStatusCode()}";
}

这样,如果您的请求路径来自“ admin”(或路径中任意位置带有admin的任何内容),它将获得您可以在views/admin/errors中创建的自定义错误文件-像它们一样命名前端...通过错误状态代码(404.blade.php500.blade.php等)

(编辑:对我的代码进行了调整,因此即使该视图尚不存在,它也会默认返回到正常的前端错误视图)