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 标签和消息。
很高兴为您提供帮助。感谢您提出这个问题。
我是 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 标签和消息。
很高兴为您提供帮助。感谢您提出这个问题。