解析Thinkphp5怎么实现前后端分离
发布时间 - 2021-05-20 00:00:00 点击率:次下面由thinkphp框架教程栏目给大家介绍thinkphp5实现前后端分离,希望对需要的朋友有所帮助!
用Thinkphp5实现纯API开发实现前后端分离
大致步骤如下
1.解决跨域请求问题
2.改变输出数据格式为API常用返回JSON格式
3.自定义异常处理(修改适配API使用)
4.开始强制路由
解决跨域问题
找到 application\targs.php扩展定义文件,修改app_init的值
// 应用行为扩展定义文件
return [
// 应用初始化
'app_init' => [
'app\api\Crossdomain\Cdom'
],
// 应用开始
'app_begin' => [],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
];在application文件夹目录下api\Crossdomain,在目录下新建Cdom.php代码文件,代码如下
isOptions()){
exit();
}
}
}改变输出数据格式为API常用返回JSON格式
TP5默认输出数据格式为HTML,显然不符合常用API接口的数据规范,在此我们需要做相应的修改。找到application目录下的config.php修改如下配置已避免每次都需要手动 json或者json_encode
// 默认输出类型
'default_return_type' => 'json',修改后返回数据时可直接返回如下
return ['code'=>1];
直接输出json格式的数据
自定义异常处理(修改适配API使用)
TP5原有的异常处理机制如果做api接口的话会造成请求直接崩溃,在异常情况下API接口无法接收到正常的JSON数据而产生错误。为此我们需要自定义TP的异常处理机制。
找到application目录下的config.php配置文件。修改如下选项为
'exception_handle' => 'app\api\Crossdomain\CdomHandle',
找到对应目录,新增CdomHandle.php文件,添加如下代码
getLine();
$first = ($line - 9 > 0) ? $line - 9 : 1;
try {
$contents = file($exception->getFile());
$source = [
'first' => $first,
'source' => array_slice($contents, $first - 1, 19),
];
} catch (Exception $e) {
$source = ['code'=>1];
}
return $source;
}
public function render(Exception $e)
{
$app_debug = Env::get('APP_DEBUG');
//如果是调试模式
if($ap
p_debug)
{
$this->msg = $e->getMessage();
$this->errCode = $e->getCode();
$this->errFile = json($this->getSourceCode($e));
$this->errline = $e->getLine();
if(Env::get('APP_TRACE'))
{
$this->errtrace = $e->getTrace();
$this->errtracestring = $e->getTraceAsString();
}
}
else
{
$result = [
'msg' => $e->getMessage(),
'errFile' => ($this->getSourceCode($e)),
'code' => 999,
];
return json($result);
}
return json([
'code'=>$this->code,
'msg'=>$this->msg,
'errCode'=>$this->errCode,
'errFile'=>$this->errFile,
'errLine'=>$this->errline,
'errtrace'=>$this->errtrace,
'errtracestring'=>$this->errtracestring
]);
}
}开启强路由
// 是否开启路由
'url_route_on' => true,
// 路由使用完整匹配
'route_complete_match' => true,
// 是否强制使用路由
'url_route_must' => true,
这里的Env用法请参考TP手册
BaseException说明:https://docs.python.org/3.1/library/exceptions.html#BaseException
相关推荐:最新的10个thinkphp视频教程
# thinkphp
# 自定义
# 目录下
# 格式为
# 后端
# 在此
# 给大家
# 不符合
# 每次都
# 可直接
# 配置文件
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
,在苏州找工作,上哪个网站比较好?
如何获取PHP WAP自助建站系统源码?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
香港服务器租用费用高吗?如何避免常见误区?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
iOS UIView常见属性方法小结
Firefox Developer Edition开发者版本入口
Python面向对象测试方法_mock解析【教程】
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
QQ浏览器网页版登录入口 个人中心在线进入
文字头像制作网站推荐软件,醒图能自动配文字吗?
jquery插件bootstrapValidator表单验证详解
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在Tomcat中配置并部署网站项目?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
深入理解Android中的xmlns:tools属性
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
手机网站制作与建设方案,手机网站如何建设?
简历在线制作网站免费版,如何创建个人简历?
,交易猫的商品怎么发布到网站上去?
如何快速查询域名建站关键信息?
如何快速选择适合个人网站的云服务器配置?
常州企业网站制作公司,全国继续教育网怎么登录?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
简单实现Android文件上传
高防服务器租用如何选择配置与防御等级?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel如何使用模型观察者?(Observer代码示例)
香港服务器部署网站为何提示未备案?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
个人网站制作流程图片大全,个人网站如何注销?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
如何在云服务器上快速搭建个人网站?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
用yum安装MySQLdb模块的步骤方法
制作电商网页,电商供应链怎么做?


p_debug)
{
$this->msg = $e->getMessage();
$this->errCode = $e->getCode();
$this->errFile = json($this->getSourceCode($e));
$this->errline = $e->getLine();
if(Env::get('APP_TRACE'))
{
$this->errtrace = $e->getTrace();
$this->errtracestring = $e->getTraceAsString();
}
}
else
{
$result = [
'msg' => $e->getMessage(),
'errFile' => ($this->getSourceCode($e)),
'code' => 999,
];
return json($result);
}
return json([
'code'=>$this->code,
'msg'=>$this->msg,
'errCode'=>$this->errCode,
'errFile'=>$this->errFile,
'errLine'=>$this->errline,
'errtrace'=>$this->errtrace,
'errtracestring'=>$this->errtracestring
]);
}
}