IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 用HhYii写一个接口吧! -> 正文阅读

[PHP知识库]用HhYii写一个接口吧!

作者:token punctuation

php回顾

关联数组:灵活

<?php

//映射写法
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach ($age as $k=>$v){
    echo $k." is " . $v . " years old.";
    echo PHP_EOL;
}

echo PHP_EOL;

//当作数组/字典写法
$age2['Peter']=35;
$age2['Ben']=37;
$age2['Joe']=43;
foreach ($age2 as $k=>$v){
    echo $k." is " . $v . " years old.";
    echo PHP_EOL;
}
?>

两种写法等价,运行结果如下:

在这里插入图片描述

json编码:简单

<?php
$arr=array('Peter'=>35);
echo CJSON::encode($arr);//写法1,HhYii自带,推荐这种写法
echo echo json_encode($arr); //写法2,PHP自带
?>

2.JSON 长什么样

在这里插入图片描述

对象用{}包起来,呈现“键:值”的形式 数组[],如上图的data就是一个数组,其中放了若干个对象。

怎么用HhYii写一个接口

1.获取传递的参数 DecodeAsk($var,[$default])
第二个参数用于设置获取不到参数时,赋一个默认值’0’

$start_date=DecodeAsk('start_date');
//获取传过来的start_date值,若没有传值,则设置默认值为'0'
$start_date=DecodeAsk('start_date','2020-1-1');
//获取传过来的start_date值,若没有传值,则设置默认值为'2020-1-1'

2.进行CRUD操作
find、findAll、save(查、改)

    //用户点击代领开关
    public function actionSwitchChange_show(){
        $package_id=DecodeAsk('id',0);//获取传入的包裹id
        $tmp=Package::model()->find('id='.$package_id);//找到这条记录
        $tmp->show_switch=!$tmp->show_switch;//修改展示开关的值
        $tmp->save();//保存,写入数据库
        echo json_encode(array('code'=>'200','msg'=>'改变显示开关'));
        //输出json数据
    }

new、赋值、save(增)

    //添加评价
    public function actionAddCommand(){
        $Command=new PickCommand();//新增评论
        $Command->remarks=DecodeAsk('remark');//把传过来的值赋值给模型,下同
        $Command->id_str=DecodeAsk('id_str');
        $Command->time=Date('Y-m-d H:i:s');
        $Command->picker_id=DecodeAsk('userId');
        $Command->serve_stars=DecodeAsk('serve_stars');
        $Command->package_stars=DecodeAsk('package_stars');
		//这行以上,记录还未插入数据库。$Command只是一个临时对象。
        $Command->save();//插入数据库
        echo json_encode(array('msg'=>'添加评论成功'));
    }

3.(可选)模型触发器

对于新记录需要初始化一些字段的情况,或者根据字段1不同的值修改字段2,使用在模型中beforesave会比直接写在控制器里更好,有利于后期维护。

4.标准化输出JSON格式数据

建议控制器使用统一规范的输出函数dataToWx。

    //输出JSON数据   第一个数组用于附加res.data 第二个数组附加res.data.data
    public function DataToWx($tmp,$s,$msg,$arr=array(),$arr2=array()){
        $data = toIoArray($tmp,$s,$arr2);
        $total=is_array($tmp)?count($tmp):1;
        $rs=array('data'=>$data,'total'=>$total,'code'=>'200','msg'=>$msg,'time' => time());
        $rs=array_merge($rs,$arr);
        echo json_encode($rs);
    }

参数说明:

$tmp 对象数组,通常为findAll后的结果
$s 字符串,用于筛选显示的字段(类似sql中的select),同时可以取别名(类似sql的as)。格式形如:“id:wx_id,name:wx_name”,其中id、name是数据库中的字段,表示只要输出id和name,不输出其他字段。wx_id,wx_name是指json数据中的别名,通常与微信小程序js临时变量名一致。
可以不写别名,即直接“id,name”。

$msg 反馈信息,方便接口调试
$arr 附加data外层数据
$arr2 附加data内层数据

Io映射

DataToWx中有一个方法toIoArray,其作用就是基于$s字符串的构造,灵活控制返回的字段和取别名。相当于一个筛子。

toIoArray($tmp,$s,$arr2);

实例

    public function actionGetTextDetailById(){
        $id=DecodeAsk('id',0);
        $tmp=BlogText::model()->findAll("id = ".$id);
        $s='title:wx_title,author:wx_author,type,view_num,publish_time,is_comment';
        $this->DataToWx($tmp,$s,'获取文章详情成功');
    }

在这里插入图片描述
原本数据库的字段是title和author,由于 $s='title:wx_title,author:wx_author,type,view_num,publish_time,is_comment定义了别名,json数据输出结果中为wx_title,wx_author。

5.检验一个接口

路由为r“控制器名称/action名字”
即 r=Io_BlogText/GetTextDetailById
浏览器直接输出,注意参数以“&参数1=值1”的形式传入参数(GET方式)。
如下图&id=31。
在这里插入图片描述

测试工具postman
如上上图测试使用了postman,好处是json数据格式化看得清晰,而且可以显示中文,浏览器不能直接输出中文(而是输出中文编码)。
谷歌拓展程序找到postman,科学上网。

6.接口文档

前后端人员规定统一标准。
简单粗暴:直接word文档。
工具有swagger、apidoc等等。

简单总结
1.用DecodeAsk获取参数
2.用findAll、new、save根据参数进行增删改查
3.用CJSON::encode、DataToWx返回JSON数据

微信小程序调用接口

官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html

微信小程序GET和POST方法请求的写法
https://blog.csdn.net/weixin_30294021/article/details/97260978

一个例子

  var app = getApp();
  getHelpWait: function (key = "") {
    let that = this;//不能漏这句
    wx.request({
      // app.globalData.url 在小程序项目最外层的app.js中的globalData对象中的url存放公用的域名头。
      url: app.globalData.url + "Io_Package/GetPackageList_HelpWait",
    //post固定header写法
      header: { "content-type": "application/x-www-form-urlencoded" },
      method: "post",
      //以键值对方式传入参数data
      //that.data就是js文件中Page下边的data
      data: {
        userId:app.globalData.userId,
        limit: that.data.count,
        keywords: key,
      },
      //成功回调
      success: function (res) {
        console.log(res)
        //回调赋值
        that.setData({
          helpWaitList: res.data.data,
          isHideLoadMore: res.data.isHideLoadMore,
          count: that.data.count + that.data.limit,
        });
      },
    });
  },

jquery调用接口

$.ajax
$.get
$.post
大同小异

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 16:53:35  更:2021-10-03 16:53:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 -2025/2/27 14:11:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码