tp5框架开发RESTful风格接口例子

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/example440982/article/details/80328087
tp5框架开发RESTful风格接口例子
@time: 2018/5/15
@author: hotsuitor@qq.com
tp版本 5.1

缘由:公司需要一个生成海报的活动,本人是负责前端写前端页面的。本人思路是前端用canvas生成海报,公司的前辈给我的建议是用后端生成海报,前端canvas生成的图片会有一写手机不适配的问题。然后……后端说很简单,你自己写一下就好了,好吧,我自己写。

公司用的是tp3框架,我没有用过,之前有用过tp5,所以直接上最新的(已经更新到了tp5.1,版本会有点区别,不要怂,就是干)。
老规矩,先看官方文档(看《ThinkPHP5快速入门》,官网的《ThinkPHP5.0完全开发手册》不详细,收费与免费的区别),直接定位到 “API开发”, 根据官方文档的例子来写。

测试数据库

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50553
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50553
File Encoding         : 65001

Date: 2018-05-15 18:39:18
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for news
-- ----------------------------
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='新闻表';

-- ----------------------------
-- Records of news
-- ----------------------------
INSERT INTO `news` VALUES ('1', '新闻1', '新闻1内容');
INSERT INTO `news` VALUES ('2', '新闻2', '新闻2内容');
INSERT INTO `news` VALUES ('3', '新闻3', '新闻3内容');
INSERT INTO `news` VALUES ('4', '房价又涨了', '据新华社消息:上海均价环比上涨5%');



数据看相关的配置 在 数据库配置文件中配置 data

在 application 目录下新建 api 目录,用版本v1来区别,tp5.1的目录结构和tp5.0版本的目录结构略有区别,读者自行看官方文档。

├─application
│  ├─api
│  │  └─controller
│  │      └─v1
│  ├─common
│     └─model
├─config
├─extend
│  └─page
├─public
│  ├─static
│  │  ├─css
│  │  ├─font
│  │  ├─img
│  │  ├─js
│  │  ├─uploads
│  │  └─video
│  └─test
├─route


在v1目录下新建 News.php 控制器,注意看命名空间,就知道目录结构了

<?php 
namespace app\api\controller\v1;

use think\Controller;

class News extends Controller
{
    public function read()
    {
        $id = input('id');
        $model = model('News');
        $data = $model->getNews($id);// 查询数据
        if ($data) {
            $code = 200;
        } else {
            $code = 404;
        }
        $data = [
            'code' => $code,
            'data' => $data
        ];
        return json($data);
    }
}



在common目录下 新建 model 目录,在model目录下,新建一个 News.php 模型

|---common
|      |---model
|            |---News.php


这里是手写的目录结构,所以跟上面tree命令生成的目录结构显示不太一样

<?php 
namespace app\common\model;

use think\Model;
use think\Db;

class News extends Model
{
    //不能写get方法,框架内部定义了get方法,本人一开始就在这里写了get方法
    //导致一直报 xxxx News::get() non static method in class xxx
    public function getNews($id = 1)
    {
        $res = Db::name('news')->where('id', $id)->select();
        // echo $this->getLastSql();
        return $res;
    }

    public function getNewsList()
    {
        $res = Db::name('news')->select();
        // echo url('picture');
        return $res;
    }
}


定义路由,在route目录下的 route.php 文件

Route::rule(':version/news/:id', 'api/:version.News/read');   //查询


在浏览器中访问 tt.xyz/?s=v1/news/1 可以看到下图结果。其中 tt.xyz 是我本地配置的host域名,入口配置了Apache重写规则,但是直接访问 tt.xyz/v1/news/1 有问题,所以改用兼容方式访问。
最后给大家看一下目录结构,以防有人找不到,文中没有谈到的目录,忽略即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值