您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

解析Thinkphp5怎么实现前后端分离

2024/4/23 20:44:07发布2次查看
下面由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代码文件,代码如下
<?phpnamespace app\api\crossdomain;class cdom{ public function appinit($params) { //配置ip白名单 在测试环境下可以为 * 号 生产环境下建议根据实际环境进行修改。 header('access-control-allow-origin: *'); header("access-control-allow-headers: token,origin, x-requested-with, x_requested_with,content-type, accept"); header('access-control-allow-methods: post,get,put'); if(request()->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文件,添加如下代码
<?phpnamespace app\api\crossdomain;use think\exception\handle;use think\env;use exception;use myclabs\enum\enum;class cdomhandle extends handle{ private $code = 999; private $msg; private $errcode; private $errfile = ''; private $errline = ''; private $errtrace = ''; private $errtracestring = ''; protected function getsourcecode(exception $exception) { // 读取前9行和后9行 $line = $exception->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($app_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视频教程
以上就是解析thinkphp5怎么实现前后端分离的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录