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);
echo echo json_encode($arr);
?>
2.JSON 长什么样

对象用{}包起来,呈现“键:值”的形式 数组[],如上图的data就是一个数组,其中放了若干个对象。
怎么用HhYii写一个接口
1.获取传递的参数 DecodeAsk($var,[$default]) 第二个参数用于设置获取不到参数时,赋一个默认值’0’
$start_date=DecodeAsk('start_date');
$start_date=DecodeAsk('start_date','2020-1-1');
2.进行CRUD操作 find、findAll、save(查、改)
public function actionSwitchChange_show(){
$package_id=DecodeAsk('id',0);
$tmp=Package::model()->find('id='.$package_id);
$tmp->show_switch=!$tmp->show_switch;
$tmp->save();
echo json_encode(array('code'=>'200','msg'=>'改变显示开关'));
}
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->save();
echo json_encode(array('msg'=>'添加评论成功'));
}
3.(可选)模型触发器
对于新记录需要初始化一些字段的情况,或者根据字段1不同的值修改字段2,使用在模型中beforesave会比直接写在控制器里更好,有利于后期维护。
4.标准化输出JSON格式数据
建议控制器使用统一规范的输出函数dataToWx。
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({
url: app.globalData.url + "Io_Package/GetPackageList_HelpWait",
header: { "content-type": "application/x-www-form-urlencoded" },
method: "post",
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 大同小异
|