php 使用thinkphp 5.0构建restful api之路第一篇

所谓restful api就是不包含index.php参数作为路径,然后参数有的则用json传递在里面,支持put,get,postdelete,
所以为了让我以前app写的架构能用,找了好半天才找到了毕竟好上手的。本人几年没玩php了,连sql语法差不多忘光了只会select * from xxx了,shit
需要配置一些东西 术语包含路由配置,隐藏入口文件 的入口文件index.php在 /tp5/public.index.php 那么.htaccess文件也应该和它在一起 也可以把这个文件弄到根目录,只是需要调整一下才行了.

所谓隐藏入口文件就是类似 访问tp.com/index.php/index/index/index
变成tp.com/index/index/index/index
更多百度搜索
、在应用入口文件同级目录添加.htaccess文件,内容如下:
.htacess文件内容如下:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On


  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

还需要开启 重写功能,
httpd.conf文件中 AllowOverride NoneNone改为 All另外开启一个模块
LoadModule rewrite_module modules/mod_rewrite.so
`

有没有生效可以直接这样测试如果 连 index.php都必须加上的话说明 没有配置好,没有配置好怎么能让
路由 http://tp5.com/index.php/index/index/hello
指向http://tp5.com/hello呢,因此这里尤为重要!

另外 http://127.0.0.1 默认指向了www文件夹
而 访问应该是http://127.0.0.1/tp5/public/index.php 才能访问到入口文件
整个路径就是非常非常长了, http://127.0.0.1/tp5/public/index.php/index/index/index 访问
D:\phpStudy\WWW\tp5\application\index\controller\index.php
中的index方法 首先就应该配置虚拟主机了,我使用的是phpstudy`
那么配置方式毕竟简单 ,编辑文件vhosts.conf

Listen 80
<VirtualHost _default_:9096>
DocumentRoot "D:\phpStudy\WWW"
  <Directory "D:\phpStudy\WWW">
    Options -Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
  </Directory>
</VirtualHost>


<VirtualHost *:80>
    DocumentRoot "D:\phpStudy\WWW\tp5\public"
    ServerName demo.cn
    ServerAlias www.demo.cn
  <Directory "D:\phpStudy\WWW\tp5\public">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
      Require all granted
  </Directory>
</VirtualHost>

window中 本地域名
C:\Windows\System32\drivers\etc host文件添加

127.0.0.1 demo.cn
127.0.0.1 tp5.com

使用ping tp5.com可以验证结果

关于路由的探讨

现在tp5.com或者tp5.com/index 或者tp5.com/index.php 或者 tp5.com/index/index/index的方法访问
/application/index/controller/index.phpindex方法 但是 如果和index.php同级的 qssq.php我怎么添加路由 实现tp5.com/qssq 访问这个文件都不行
!!

只能通过tp5.com/index/qssq/index/index访问 我说的 同级目录也就是说在路由指向/application/index/controller/qssq.php

最终没搞定 不过有2种方法倒是可以实现

  1. 是在application直接添加qssq/controller/index.php的模式 不知道啥术语,
  2. index/controller/index.php添加qssq方法然后路由指定。//Route::rule('qssq','index/Index/index/qssq');但是我有强迫症咋办,

注意

路由配置 方法的时候 申明了参数的时候,那么找不到路由的情况就要仔细看看是不是这个问题。

终于搞定之前的问题

注意

路由配置 方法的时候 申明了参数的时候,那么找不到路由的情况就要仔细看看是不是这个问题。

最后解决了这个问题 ,路由设置方式是:
Route::get('qssq','index/qssq/start');
真实路径是http://tp5.com/index/qssq/start

也就是说方法名最好别用index,否则会出现有时候就http://tp5.com/index/qssq/index 都访问不了的情况.

http://tp5.com/index/qssq/start 结构分析

start方法名,qssq php文件名,index, application里面的 index文件夹模块

默认的index 模块的idnex文件是http://tp5.com/index/index/index

快速生成restapi 方法 控制器

生成控制器又刚好在恰当的位置,选用index控制器也就是和index/controller/index.php文件在一起, 也就是上面我说的 通过路由 实现·tp5.com/qssq'访问 'application/index/controller/qssq.php`文件的某个方法的这种。

生成控制器得用php命令
经过我的研究发现,这样输入姿势才是最正确的,否则会出现各种情况不对,目录没没放对的情况.
先大致看一下我的项目结构,www文件夹下面有这些,

├─thinkphp
│  ├─lang
│  ├─library
│  │  ├─think
│  │  │  ├─cache
│  │  │  │  └─driver
│  │  │  ├─config
│  │  │  │  └─driver
│  │  │  ├─console
│  │  │  │  ├─bin
│  │  │  │  ├─command
│  │  │  │  │  ├─make
│  │  │  │  │  │  └─stubs
│  │  │  │  │  └─optimize
│  │  │  │  ├─input
│  │  │  │  └─output
│  │  │  │      ├─descriptor
│  │  │  │      ├─driver
│  │  │  │      ├─formatter
│  │  │  │      └─question
│  │  │  ├─controller
│  │  │  ├─db
│  │  │  │  ├─builder
│  │  │  │  ├─connector
│  │  │  │  └─exception
│  │  │  ├─debug
│  │  │  ├─exception
│  │  │  ├─log
│  │  │  │  └─driver
│  │  │  ├─model
│  │  │  │  └─relation
│  │  │  ├─paginator
│  │  │  │  └─driver
│  │  │  ├─process
│  │  │  │  ├─exception
│  │  │  │  └─pipes
│  │  │  ├─response
│  │  │  ├─session
│  │  │  │  └─driver
│  │  │  ├─template
│  │  │  │  ├─driver
│  │  │  │  └─taglib
│  │  │  └─view
│  │  │      └─driver
│  │  └─traits
│  │      ├─controller
│  │      ├─model
│  │      └─think
│  └─tpl
├─tp5
│  ├─application
│  │  ├─index
│  │  │  ├─controller
│  │  │  ├─model
│  │  │  └─view
│  │  └─my
│  │      └─controller
│  ├─client
│  ├─extend
│  ├─public
│  │  └─static
│  ├─runtime
│  │  └─log
│  │      └─201709
│  └─vendor
└─vendor
    ├─composer
    └─topthink
        └─think-installer
            └─src

原来的Rest类继承的姿势已经不推荐了,所以我这里研究新姿势,
首先cmd命令行进入类似这样的目录`D:\phpStudy\www\tp5文件夹
输入

php think make:controller index/Qssq1

这时候会自动产生一个规范的文件
D:\phpStudy\www\tp5\application\index\controller\Qssq1.php

生成如下文件内容如下:

<?php

namespace app\index\controller;

use think\Controller;
use think\Request;

class Qssq1 extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        //
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}

也就是下面这些


请求类型    生成路由规则  对应操作方法
GET blog    index
GET blog/create create
POST    blog    save
GET blog/:id    read
GET blog/:id/edit   edit
PUT blog/:id    update
DELETE  blog/:id    delete

然后你只需要为资源控制器注册一个资源路由:

Route::resource('qssq1','index/Qssq1');
为了方便测试在index方法返回了一段字符串 也在add里面返回了字符串,
然后分别访问tp5.com/qssq1 tp5.com/qssq1\add 发现完美搞定,那么 ?问号后面的参数如何接受呢.类似要高仿一个下面这样的api,
https://cloud.qssq.cn/mcm/api/devices?filter=%7B%22where%22%3A%7B%22account%22%3A%22694886526%22%7D%7D
也就是根的查询.

2019-5-23 19:24:24

再次玩这个玩意又变成了新鲜的了,各种错误,比如 没有指定文件是因为httpaccess文件,找不到文件 访问拒绝其实不是权限问题,而是文件不完整。

使用的最佳方法是从thinkphp官网下载 一个zip上传到服务器然后解压,然后 更改application/的 路由.php和 database.php就大功告成了。
thinkphp apache指定thinkphp的public文件夹就行,
控制器找不到要检查一下类名是否正常,我创建一个新的表,拷贝一个新的文件发现控制器不存在,我发现类名没改,所以改一下解决了问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • 作者:陈中舒时间:2017年5月11日 ThinkPHP 5.0的安装 方式一:官网下载 官网地址:http://...
    忠叔阅读 6,916评论 3 54
  • 当天夜里,宋就被妈妈叫醒,说吃饱了就要干活啊。 她背着一书包的人民币跟着妈妈走在漆黑的街道, 走入昏暗的楼道,看到...
    Runningapple阅读 444评论 0 0
  • 01 常言道“酒逢知己千杯少,话不投机半句多”,知己之间永远都有说不完的话题,永远不会厌倦。对于那种说不到一块的朋...
    言西小熊阅读 348评论 2 2
  • XML数据格式解析 pull解析方式 sax解析方式 JSON 数据格式解析 解析代码很简单,但是还要有APP类,...
    gogoingmonkey阅读 303评论 0 0