Lumen 中的自定义 404 页面

Custom 404 page in Lumen

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

此外,我能够检查当前 url 是否有效,但我不确定如何 "make" 中间件中的视图,即 response()-> view() 将不起作用。

如果有人能提供帮助,那就太好了。

鉴于错误是在 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 页面存储在您视图中的错误文件夹中,并且 return 自定义错误页面将连同 404 状态代码。

您可能需要添加此内容,以便当 blade 错误页面处理程序爆炸时不会抛出 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);
 }

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

我正在使用 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);
}

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

404.blade.php

500.blade.php

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

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