yii的restful配置问题 [ 2.0 版本 ]
请教个事,yii restful接口提供的四个方法get,post,delete,put
为何前三个行的通,但是put
和行不通。
url配置:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'rest'],
],
],
.htaccess文件:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
#Rewritebase /yunweb
Rewritebase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
本地的host里面配了一个本地访问的二级域名 http:// myblog.luojia.me
目前测试的状态是get和post,delete都正常,但是put不执行
response信息:
1.get
http://myblog.luojia.me/rests
<?xml version="1.0" encoding="UTF-8"?>
<response>
<item>
<id>1</id>
<username>admin</username>
<pass>admin</pass>
<email>test@test.com</email>
<role>1</role>
</item>
<item>
<id>2</id>
<username>user</username>
<pass>user</pass>
<email>user@user.com</email>
<role>0</role>
</item>
<item>
<id>3</id>
<username>summer</username>
<pass>summer</pass>
<email>summer@summer.com</email>
<role>0</role>
</item>
<item>
<id>4</id>
<username>东东</username>
<pass>123456</pass>
<email>123@123.com</email>
<role>0</role>
</item>
<item>
<id>5</id>
<username>罗小葭</username>
<pass>123456</pass>
<email>1234@123.com</email>
<role>0</role>
</item>
</response>
2.post(数据库新增id为11的记录)
<?xml version="1.0" encoding="UTF-8"?>
<response>
<id>11</id>
</response>
3.delete(http://myblog.luojia.me/rests/1
)
返回状态为204,no content
意思是“ 该请求被成功处理,响应不包含正文内容”,数据库中成功删除
4.put(http://myblog.luojia.me/rests/3?username=test
)
返回状态为200,是成功的,可是数据库中的值并没有改变,也就是实际操作失效,测试下来貌似他的作用只是取出id为3的记录
我的思路有两条,一是我的url写的有问题,之前没接触过restful这个很有可能
另一条是yii没有正确解析url没找到put对应的方法
在此特邀前辈们一起讨论
共 2 个回答
-
贴一下
response
信息共 8 条回复@summer914
url
中的username=test
, 是要修改的数据吗?put
方法需要把该部分数据装载进请求体, 而非以参数的形式传递.@summer914 你可以使用
chrome
里面的工具postman
来调试......或者直接curl
@summer914 不知道你的什么工具, 各个工具用起来可能也略有差异. 这个帮不了你了
curl -X PUT -d username=test 'http://myblog.luojia.me/rests/3'
这是用curl
的命令@summer914 额 干脆这样 你写段
php
代码, 用php
的curl
函数来完成这个请求好了. -
dingjj2010 回答于 2015-09-23 13:53 举报
看了一下代码
'update' => ['PUT', 'PATCH']
, 更新。
而更新$model->load(Yii::$app->getRequest()->getBodyParams(), '');
值是从bodyparams里面取得。估计直接url传值有问题。
summer914
最后登录:2016-02-22
在线时长:7小时55分
- 粉丝26
- 金钱405
- 威望30
- 积分775