在Lumen中自定义404页面

时间:2016-02-05 03:17:03

标签: laravel lumen

我是Lumen的新手,想要用这个框架创建一个应用程序。现在我遇到的问题是,如果某个用户输入了错误的网址=> http://www.example.com/abuot(错误)=> http://www.example.com/about(右),我想提供一个自定义错误页面,这将是中间件级别的理想选择。

此外,我能够检查当前网址是否有效,但我不确定如何在中间件中“制作”视图,响应() - > view()将无法正常工作

如果有人可以提供帮助,那会很棒。

4 个答案:

答案 0 :(得分:21)

看到错误在App\Exceptions\Handler处理,这是处理它们的最佳位置。

如果您只是在自定义404错误页面之后,那么您可以非常轻松地完成此操作:

Handler文件的顶部添加此行:

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

render函数改为:

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

这假设您的自定义404页面存储在视图中的错误文件夹中,并将返回自定义错误页面以及404状态代码。

答案 1 :(得分:1)

您可能希望添加此内容,以便例如在刀片被炸毁时,错误页面处理程序将不会引发PHP错误。

public function render($request, Exception $exception)
 {
   if (method_exists('Exception','getStatusCode')){

     if($exception->getStatusCode() == 404){
       return response(view("errors.404"), 404);
     }

     if($exception->getStatusCode() == 500){
       return response(view("errors.500"), 404);
     }
   }
   return parent::render($request, $exception);
 }

答案 2 :(得分:1)

我正在使用 Lumen 8.x version 和以下解决方案:

文件路径: ▸ app ▸ Exceptions ▸ Handler.php

public function render($request, Throwable $exception)
{
    // start custom code
    if($exception->getStatusCode() == 404){
        return response(view("errors.404"), 404);
    }
    if($exception->getStatusCode() == 500){
        return response(view("errors.500"), 404);
    }
    // end custom code

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

不要忘记在 errors 创建 /resources/views/errors 文件夹并在 errors 文件夹中创建以下 2 个新文件:

404.blade.php

500.blade.php

并在这些文件中添加您要添加​​的 html 标签和消息。

很高兴为您服务。感谢您提出这个问题。

答案 3 :(得分:0)

我遇到了同样的情况。 response(view("errors.404"), 404)对我不起作用,因此我进行了如下更改:

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