解析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 】
相关推荐:
如何彻底删除建站之星生成的Banner?
JS经典正则表达式笔试题汇总
如何在IIS中配置站点IP、端口及主机头?
phpredis提高消息队列的实时性方法(推荐)
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何续费美橙建站之星域名及服务?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
三星网站视频制作教程下载,三星w23网页如何全屏?
JS碰撞运动实现方法详解
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
原生JS实现图片轮播切换效果
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
,在苏州找工作,上哪个网站比较好?
如何正确下载安装西数主机建站助手?
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
教你用AI将一段旋律扩展成一首完整的曲子
如何快速生成凡客建站的专业级图册?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
利用python获取某年中每个月的第一天和最后一天
javascript日期怎么处理_如何格式化输出
香港服务器网站卡顿?如何解决网络延迟与负载问题?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
python中快速进行多个字符替换的方法小结
高性价比服务器租赁——企业级配置与24小时运维服务
公司网站制作价格怎么算,公司办个官网需要多少钱?
晋江文学城电脑版官网 晋江文学城网页版直接进入
黑客如何利用漏洞与弱口令入侵网站服务器?
如何快速生成专业多端适配建站电话?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
js实现点击每个li节点,都弹出其文本值及修改
linux top下的 minerd 木马清除方法
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Android中AutoCompleteTextView自动提示
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
如何破解联通资金短缺导致的基站建设难题?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Python文本处理实践_日志清洗解析【指导】
如何在云指建站中生成FTP站点?
昵图网官方站入口 昵图网素材图库官网入口
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
简单实现jsp分页
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
MySQL查询结果复制到新表的方法(更新、插入)


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
]);
}
}