我是Lumen的新手,想要用这个框架创建一个应用程序。现在我遇到的问题是,如果某个用户输入了错误的网址=> http://www.example.com/abuot(错误)=> http://www.example.com/about(右),我想提供一个自定义错误页面,这将是中间件级别的理想选择。
此外,我能够检查当前网址是否有效,但我不确定如何在中间件中“制作”视图,响应() - > view()将无法正常工作
如果有人可以提供帮助,那会很棒。
答案 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);
}