【问题标题】:Custom 404 page in LumenLumen 中的自定义 404 页面
【发布时间】:2016-05-14 22:22:39
【问题描述】:

我是 Lumen 的新手,想用这个框架创建一个应用程序。现在我遇到的问题是,如果某些用户输入了错误的 url => http://www.example.com/abuot(错误)=> http://www.example.com/about(正确),我想呈现一个自定义错误页面,它会在中间件级别发生是理想的。

此外,我可以检查当前 url 是否有效,但我不确定如何在中间件中“制作”视图,response()->view() 将不起作用。

如果有人能帮忙就太好了。

【问题讨论】:

  • @maiorano84 该文档适用于 Laravel,不适用于 Lumen。需要手动捕获和处理异常。
  • 肯定是重复的,可惜这里的答案更好

标签: laravel lumen


【解决方案1】:

由于错误在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 状态代码。

【讨论】:

  • 谢谢,我在生产和开发环境都用过
  • instanceof 条件对我不起作用。替换为 $e->getStatusCode() == 404 并且有效。
  • 对于那些 if 不起作用的人,请确保您导入类 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 或在 if 语句中指定完整路径 ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
【解决方案2】:

您可能需要添加它,这样当刀片发生故障时,错误页面处理程序不会抛出 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);
 }

【讨论】:

  • 不适合我亲爱的,在 Lumne 8 版本中仍然使用旧的 404 屏幕。谢谢。
【解决方案3】:

我遇到了同样的情况。 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);
}

【讨论】:

    【解决方案4】:

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

    文件路径:‎▸ 应用 ▸ 例外 ▸ 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);
    }
    

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

    404.blade.php

    500.blade.php

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

    很高兴为您提供帮助。感谢您提出这个问题。

    【讨论】:

    • 这对我来说看起来很有希望,但由于找不到 getStatusCode(),我进入了 Lumen 8。这是在哪里?
    猜你喜欢
    • 2018-11-16
    • 2017-09-23
    • 1970-01-01
    • 2010-11-04
    • 2012-10-26
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多