本文目录导读:

在ThinkPHP项目中定制错误页面,主要有以下几种方式,可以根据你的ThinkPHP版本选择合适的方法:
ThinkPHP 6.0/8.0 版本(推荐)
使用异常处理类
方式1:修改配置
在 config/app.php 中添加:
return [
// 其他配置...
// 显示错误信息
'show_error_msg' => true,
// 异常页面模板
'exception_tmpl' => app()->getRootPath() . 'view/error.tpl',
];
方式2:自定义异常处理类
在 app/ 目录下创建 exception/Handle.php:
<?php
namespace app\exception;
use think\exception\Handle;
use think\Response;
use Throwable;
class Http extends Handle
{
public function render($request, Throwable $e): Response
{
// 记录异常日志
// 可以在这里根据状态码返回自定义页面
// 如果是HTTP异常
if ($e instanceof \think\exception\HttpException) {
$statusCode = $e->getStatusCode();
// 根据状态码返回不同模板
if ($statusCode == 404) {
return response(view('errors/404'), 404);
} elseif ($statusCode == 500) {
return response(view('errors/500'), 500);
}
}
// 其他异常返回默认处理
return parent::render($request, $e);
}
}
创建错误页面模板
在 app/view/errors/ 目录下创建:
html:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">404 - 页面不存在</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
padding: 50px;
background: #f5f5f5;
}
h1 {
font-size: 72px;
color: #ff6b6b;
margin: 20px 0;
}
p {
font-size: 18px;
color: #666;
}
a {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
background: #4CAF50;
color: white;
text-decoration: none;
border-radius: 5px;
}
</style>
</head>
<body>
<h1>404</h1>
<p>抱歉,您访问的页面不存在</p>
<a href="/">返回首页</a>
</body>
</html>
html:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">500 - 服务器错误</title>
<style>
/* 类似404的样式 */
body {
font-family: Arial, sans-serif;
text-align: center;
padding: 50px;
background: #f5f5f5;
}
h1 {
font-size: 72px;
color: #ff6b6b;
margin: 20px 0;
}
p {
font-size: 18px;
color: #666;
}
a {
display: inline-block;
margin-top: 20px;
padding: 10px 20px;
background: #4CAF50;
color: white;
text-decoration: none;
border-radius: 5px;
}
</style>
</head>
<body>
<h1>500</h1>
<p>服务器出现错误,请稍后再试</p>
<a href="/">返回首页</a>
</body>
</html>
ThinkPHP 5.x 版本
修改配置文件
在 application/config.php 中添加:
// 异常页面模板 'exception_tmpl' => THINK_PATH . 'tpl/think_exception.tpl',
自定义异常处理
在 application/ 目录下创建 common.php:
<?php
// 自定义异常处理
\think\App::getInstance()->setExceptionHandler(function($e) {
if ($e instanceof \think\exception\HttpException) {
$statusCode = $e->getStatusCode();
switch ($statusCode) {
case 404:
return response(view('errors/404'), 404);
break;
case 500:
return response(view('errors/500'), 500);
break;
default:
return response(view('errors/error'), $statusCode);
}
}
// 其他异常
return response('服务器错误', 500);
});
使用路由和控制器方式(兼容所有版本)
在 route/route.php 或 Route.php 中添加:
Route::miss('Index/error'); // 404
Route::any('error/:code', 'Index/error');
在控制器中创建:
<?php
namespace app\controller;
use think\Controller;
class Index extends Controller
{
public function error($code = 0)
{
$message = [
'404' => '页面不存在',
'500' => '服务器错误',
'403' => '禁止访问',
];
$this->assign('code', $code);
$this->assign('message', $message[$code] ?? '未知错误');
return $this->fetch('error');
}
}
视图模板 view/error.html:
<!DOCTYPE html>
<html>
<head>{$code} {$message}</title>
<style>
/* 自定义样式 */
</style>
</head>
<body>
<h1>{$code}</h1>
<p>{$message}</p>
<a href="/">返回首页</a>
</body>
</html>
注意事项
- 开发环境:建议开启详细错误信息,方便调试
- 生产环境:关闭详细错误,展示友好页面
- 日志记录:建议在错误页面中记录异常日志
- 安全考虑:不要在生产环境暴露错误详情
配置示例(生产环境):
// config/app.php (TP6)
return [
'app_debug' => false, // 关闭调试模式
'show_error_msg' => true, // 显示自定义错误
];
建议根据项目需求选择合适的方式,并确保错误页面样式与网站整体风格保持一致,提供友好的用户体验。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播