解析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($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视频教程


# 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查询结果复制到新表的方法(更新、插入)