php使用thinkphp50构建restfulapi之路第一篇
简书链接:php使用thinkphp50构建restfulapi之路第一篇
文章字数:1595,阅读全文大约需要6分钟
所谓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文件内容如下:
1 | <IfModule mod_rewrite.c> |
还需要开启 重写功能,httpd.conf
文件中
AllowOverride None 将
None改为
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
1 | Listen 80 |
window中 本地域名C:\Windows\System32\drivers\etc
host文件添加
1 | 127.0.0.1 demo.cn |
使用ping tp5.com
可以验证结果
关于路由的探讨
现在tp5.com
或者tp5.com/index
或者tp5.com/index.php
或者 tp5.com/index/index/index
的方法访问/application/index/controller/index.php
的index
方法 但是 如果和index.php
同级的 qssq.php
我怎么添加路由 实现tp5.com/qssq
访问这个文件都不行
!!
只能通过tp5.com/index/qssq/index/index
访问 我说的 同级目录也就是说在路由指向/application/index/controller/qssq.php
最终没搞定 不过有2种方法倒是可以实现
- 是在application直接添加
qssq/controller/index.php
的模式 不知道啥术语, - 在
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文件夹下面有这些,
1 | ├─thinkphp |
原来的Rest类继承的姿势已经不推荐了,所以我这里研究新姿势,
首先cmd命令行进入类似这样的目录`D:\phpStudy\www\tp5文件夹
输入
1 | php think make:controller index/Qssq1 |
这时候会自动产生一个规范的文件D:\phpStudy\www\tp5\application\index\controller\Qssq1.php
生成如下文件内容如下:
1 | <?php |
也就是下面这些
1 |
|
然后你只需要为资源控制器注册一个资源路由:
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文件夹就行,
控制器找不到要检查一下类名是否正常,我创建一个新的表,拷贝一个新的文件发现控制器不存在,我发现类名没改,所以改一下解决了问题。