Lumen 中的自定义 404 页面
Posted
技术标签:
【中文标题】Lumen 中的自定义 404 页面【英文标题】:Custom 404 page in Lumen 【发布时间】:2016-05-14 22:22:39 【问题描述】:我是 Lumen 的新手,想用这个框架创建一个应用程序。现在我遇到的问题是,如果某些用户输入了错误的 url => http://www.example.com/abuot(错误)=> http://www.example.com/about(正确),我想呈现一个自定义错误页面,它会在中间件级别发生是理想的。
此外,我可以检查当前 url 是否有效,但我不确定如何在中间件中“制作”视图,response()->view() 将不起作用。
如果有人能帮忙就太好了。
【问题讨论】:
Creating custom error page in Lumen的可能重复 @maiorano84 该文档适用于 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。这是在哪里?以上是关于Lumen 中的自定义 404 页面的主要内容,如果未能解决你的问题,请参考以下文章
重定向到 DjangoCMS 中的自定义 404 html 页面