如何在 laravel 5 中创建自定义错误页面
how do I create custom error page in laravel 5
我想在我的 Laravel 5 应用程序中显示自定义错误页面;例如,任何用户类型 URL,如 http://www.example.com/url123
(错误),但 http://www.example.com/url
(正确)。
默认错误显示为:
Uh-oh, something went wrong! Error Code: 500
但我想显示我的自定义视图
我如何实现这一点,如下面引用的页面所示:
https://mattstauffer.co/blog/laravel-5.0-custom-error-pages#how-to
https://laracasts.com/discuss/channels/general-discussion/how-do-i-create-a-custom-404-error-page
我目前的 app/Exceptions/Handler.php
:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use symfony\http-kernel\Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class Handler extends ExceptionHandler {
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
public function report(Exception $e)
{
return parent::report($e);
}
public function render($request, Exception $e)
{
if ($this->isHttpException($e))
{
return $this->renderHttpException($e);
}
else if($e instanceof NotFoundHttpException)
{
return response()->view('missing', [], 404);
}
else
{
return parent::render($request, $e);
}
}
}
并且我在 \resources\views\errors4.blade.php
处创建了一个错误视图,但 404.blade.php
仍然没有加载。
谢谢大家,
现在它运行成功,
我只是改变了我的 app/Exceptions/Handler.php :
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler {
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
public function report(Exception $e)
{
return parent::report($e);
}
public function render($request, Exception $e)
{
if ($this->isHttpException($e)) {
return $this->renderHttpException($e);
} else {
return parent::render($request, $e);
}
}
}
并创建错误视图:\resources\views\errors4.blade.php
这对我有用 Laravel 5.5:-
/config/constants.php
define('ERROR_MSG_403', "You are not authorized to view that page!");
define('ERROR_MSG_404', "Page not found!");
define('ERROR_MSG_UNKNOWN', "Something went wrong!");
/app/Exceptions/Handler.php
public function render($request, Exception $e)
{
$response = [];
$response['exception'] = get_class($e);
$response['status_code'] = $e->getStatusCode();
switch($response['status_code'])
{
case 403:
$response['message'] = ERROR_MSG_403;
break;
case 404:
$response['message'] = ERROR_MSG_404;
break;
default:
$response['message'] = ERROR_MSG_UNKNOWN;
break;
}
return response()->view('Error.error', compact('response'));
// return parent::render($request, $exception);
}
/resources/views/Error/error.blade.php
<?=dd($response); //Implement your view layout here?>
我正在使用 Laravel 6.4 为此,您可以创建自定义错误页面 blade 文件,Laravel 会为您完成剩下的工作. 运行在你的项目目录下执行以下命令
php artisan vendor:publish --tag=laravel-errors
这将在 resources/views/errors/.
中创建 blade 个文件,例如,对于 404 错误,您将在 resources/views/errors/404.blade.php.
中创建它。
现在假设您希望在示例代码中传递一个 Not Found Error 让我们说一个函数到 return 一个 post 类别
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$count = Post::find($id)->count();
if ($count < 1) return abort('404', 'The post you are looking for was not found');
}
abort()
方法会触发加载blade文件resources/views/errors/404.blade.php
并传入第二个参数作为消息的未找到异常。您可以在 blade 文件中以
访问此消息
<h2>{{ $exception->getMessage() }}</h2>
转到此 link(官方文档)了解详细信息 https://laravel.com/docs/6.x/errors#custom-http-error-pages
首先你需要输入命令
php artisan vendor:publish --tag=laravel-errors
它将在 resources/views/errors 中创建一些错误 blade 文件,例如 404,500,403,401,419,429,503。您可以根据您的设计要求自定义这些页面。
app/Exceptions/Handler.php
public function render($request, Throwable $exception)
{
$response = parent::render($request, $exception);
if ($response->status() === 500) {
return response(view('errors.500'), 500);
}
return $response;
}
app/config/app.php
'debug' => (bool) env('APP_DEBUG', false)
注意:不要在视图文件夹中手动创建错误文件夹,因为某些库文件不会在供应商文件夹中创建。这是抛出错误的原因。请只使用 laravel 命令。
我想在我的 Laravel 5 应用程序中显示自定义错误页面;例如,任何用户类型 URL,如 http://www.example.com/url123
(错误),但 http://www.example.com/url
(正确)。
默认错误显示为:
Uh-oh, something went wrong! Error Code: 500
但我想显示我的自定义视图
我如何实现这一点,如下面引用的页面所示:
https://mattstauffer.co/blog/laravel-5.0-custom-error-pages#how-to
https://laracasts.com/discuss/channels/general-discussion/how-do-i-create-a-custom-404-error-page
我目前的 app/Exceptions/Handler.php
:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use symfony\http-kernel\Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class Handler extends ExceptionHandler {
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
public function report(Exception $e)
{
return parent::report($e);
}
public function render($request, Exception $e)
{
if ($this->isHttpException($e))
{
return $this->renderHttpException($e);
}
else if($e instanceof NotFoundHttpException)
{
return response()->view('missing', [], 404);
}
else
{
return parent::render($request, $e);
}
}
}
并且我在 \resources\views\errors4.blade.php
处创建了一个错误视图,但 404.blade.php
仍然没有加载。
谢谢大家, 现在它运行成功,
我只是改变了我的 app/Exceptions/Handler.php :
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler {
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
public function report(Exception $e)
{
return parent::report($e);
}
public function render($request, Exception $e)
{
if ($this->isHttpException($e)) {
return $this->renderHttpException($e);
} else {
return parent::render($request, $e);
}
}
}
并创建错误视图:\resources\views\errors4.blade.php
这对我有用 Laravel 5.5:-
/config/constants.php
define('ERROR_MSG_403', "You are not authorized to view that page!");
define('ERROR_MSG_404', "Page not found!");
define('ERROR_MSG_UNKNOWN', "Something went wrong!");
/app/Exceptions/Handler.php
public function render($request, Exception $e)
{
$response = [];
$response['exception'] = get_class($e);
$response['status_code'] = $e->getStatusCode();
switch($response['status_code'])
{
case 403:
$response['message'] = ERROR_MSG_403;
break;
case 404:
$response['message'] = ERROR_MSG_404;
break;
default:
$response['message'] = ERROR_MSG_UNKNOWN;
break;
}
return response()->view('Error.error', compact('response'));
// return parent::render($request, $exception);
}
/resources/views/Error/error.blade.php
<?=dd($response); //Implement your view layout here?>
我正在使用 Laravel 6.4 为此,您可以创建自定义错误页面 blade 文件,Laravel 会为您完成剩下的工作. 运行在你的项目目录下执行以下命令
php artisan vendor:publish --tag=laravel-errors
这将在 resources/views/errors/.
中创建 blade 个文件,例如,对于 404 错误,您将在 resources/views/errors/404.blade.php.
中创建它。
现在假设您希望在示例代码中传递一个 Not Found Error 让我们说一个函数到 return 一个 post 类别
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$count = Post::find($id)->count();
if ($count < 1) return abort('404', 'The post you are looking for was not found');
}
abort()
方法会触发加载blade文件resources/views/errors/404.blade.php
并传入第二个参数作为消息的未找到异常。您可以在 blade 文件中以
<h2>{{ $exception->getMessage() }}</h2>
转到此 link(官方文档)了解详细信息 https://laravel.com/docs/6.x/errors#custom-http-error-pages
首先你需要输入命令 php artisan vendor:publish --tag=laravel-errors
它将在 resources/views/errors 中创建一些错误 blade 文件,例如 404,500,403,401,419,429,503。您可以根据您的设计要求自定义这些页面。
app/Exceptions/Handler.php
public function render($request, Throwable $exception)
{
$response = parent::render($request, $exception);
if ($response->status() === 500) {
return response(view('errors.500'), 500);
}
return $response;
}
app/config/app.php
'debug' => (bool) env('APP_DEBUG', false)
注意:不要在视图文件夹中手动创建错误文件夹,因为某些库文件不会在供应商文件夹中创建。这是抛出错误的原因。请只使用 laravel 命令。