这一章要进行的东西还蛮多的,从小程序navigator到wx.request,再到后台的restful进行数据集的通讯,前后台一起实战,和老沙一起做一个全栈工程师吧。
一个一个来吧,先说需求。
需求:
每个宝宝都有很多相册,自己的、和父母的、和粉丝的、和各种奇葩物体的。这些不同的相册将照片按照场景分开,就像商品和分类的概念一样,每个相册有自己的名字及生成时间,一个照片只能属于一个相册。
当然后期相册还会和“去哪儿”频道进行结合。
在小程序的位置见下图
开始准备 数据表的结构如下:在photo中有个字段type是多态的,当type=1代表图片,type=2代表视频。photo中有个外键就是album_id代表此图片/视频所属的相册。
小提醒:在实际开发中北哥推荐使用migrate来维护你的数据表结构,用法可以参考《90个小时》原创视频进阶篇 第1节&第2节。
准备模型数据表建完后我们通过yii2的gii工具分别建立了Album和Photo模型,通过这些模型可以和数据表数据进行交互。
建立第一个restful接口小程序的相册列表页面需要得到相册名字、内含照片数量并且相册按照更新时间进行降序排序。
我们先来构造符合前台需求的restful风格的接口。通过对上一篇的学习老沙知道首先要urlManager中的路由,如下图
然后建立这个路由对应的restful风格的控制器,重点是要继承于ActiveController
如上图所写,只需要继承于ActiveController并且制定一个modelClass即可,到此刻位置一个restful就建立成功了,我们尝试先给数据库的album填写一些数据后访问接口 GET https://xgh.nai8.me/xcx/albums 看看效果
老沙泯然一笑,很成功。
但是这仍然不是我想要的结果,我需要的结果是
编号id
名字name
更新时间(格式化为0000-00-00 00:00:00)
相册内照片数量
也就是说我需要让后台去掉几个字段并增加几个字段。,当然这并不难,老沙同学之前就玩过。
去掉字段也就是字段的筛选,我们可以在GET /xcx/albums的时候传递一个fields,注明我们需要的字段,在这里就是GET /xcx/albums?fields=id,name
事业成功一半了,接下来我们还需要 更新时间 和 相册内照片数量 ,首先说这两个字段在数据表中根本不存在,那么对于此类问题需要如何解决那?
好解决,yii2已经提供了解决方案,就是expand
expand的视频教学可以在PHP原创视频内学到。
我们来实际操作下expand的用法首先为接口增加 expand项 GET /xcx/albums?fields=id,name&expand=formatUpdateTime,photoTotal
然后回到我们的模型Album,重载extraFields函数
当然我们还需要去实现formatUpdateTime和photoTotal,如下图在模型Album中增加两个函数即可
接下来访问接口 GET /xcx/albums?fields=id,name&expand=formatUpdateTime,photoTotal 试试
完美解决。
小程序端现在后台已经准备完毕,老沙需要布局小程序,效果图如下
页面并不复杂,我从后台获取数据后在小程序的视图上进行一个遍历即可。
我建立了一个list Page。
获取后台数据