在Lumen中创建自定义错误页面

时间:2015-05-14 08:59:50

标签: laravel blade lumen

如何为Lumen上的错误创建自定义视图?我尝试创建resources/views/errors/404.blade.php,就像我们在Laravel 5中可以做的那样,但它不起作用。

3 个答案:

答案 0 :(得分: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。就像上面编辑的代码一样。

答案 1 :(得分:9)

The answer by lukasgeiter 几乎正确,但使用view函数进行的响应将始终带有200 HTTP状态代码,这对于抓取工具或任何依赖它的用户代理。

Lumen documentation试图解决这个问题,但是给出的代码不起作用,因为它是从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目录中。

答案 2 :(得分:0)

它对我没有用,但我得到了它:

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

您可能还想添加

http_response_code(404) 

告诉搜索引擎有关页面状态的信息。