7

How do I create custom view for errors on Lumen? I tried to create resources/views/errors/404.blade.php, like what we can do in Laravel 5, but it doesn't work.

4

3 回答 3

16

错误在App\Exceptions\Handler. 要显示 404 页面,请将render()方法更改为:

public function render($request, Exception $e)
{
    if($e instanceof NotFoundHttpException){
        return response(view('errors.404'), 404);
    }
    return parent::render($request, $e);
}

并将其添加到 Handler.php 文件的顶部:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

编辑:正如@YiJiang 指出的那样,响应不仅应该返回 404 视图,还应该包含正确的状态码。因此view()应该包装在作为状态码response()传入的调用中。404就像上面编辑过的代码一样。

于 2015-05-14T09:04:01.017 回答
13

lukasgeiter 的回答几乎是正确的,但是使用该view函数做出的响应将始终带有200HTTP 状态码,这对于爬虫或任何依赖它的用户代理来说都是有问题的。

Lumen 文档试图解决这个问题,但是给出的代码不起作用,因为它是从 Laravel 复制的,并且 Lumen 的ResponseFactory类的精简版本缺少该view方法。

这是我目前正在使用的代码。

use Symfony\Component\HttpKernel\Exception\HttpException;

[...] 

public function render($request, Exception $e)
{
    if ($e instanceof HttpException) {
        $status = $e->getStatusCode();

        if (view()->exists("errors.$status")) {
            return response(view("errors.$status"), $status);
        }
    }

    if (env('APP_DEBUG')) {
        return parent::render($request, $e);
    } else {
        return response(view("errors.500"), 500);
    }
}

这假设您将错误存储在errors视图下的目录中。

于 2015-12-03T03:59:26.203 回答
0

它对我不起作用,但我得到了它:

if($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
  return view('errors.404');
}

您可能还想添加

http_response_code(404) 

告诉搜索引擎页面的状态。

于 2015-05-28T20:47:01.907 回答