2015-09-23 10:46:13 4771次浏览 2条回答 2 悬赏 40 金钱

请教个事,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对应的方法

在此特邀前辈们一起讨论

  • 回答于 2015-09-23 12:58 举报

    贴一下 response 信息

    8 条回复
    回复于 2015-09-23 13:32 回复

    response信息已贴出,目前只有put有问题,我用的是火狐的httprequester插件测试,put测试url(http://myblog.luojia.me/rests/3?username=test),目的是将id为3的记录的username改为test,返回状态为200,xml返回了id为3的的记录,但是数据库中username并未改变。 请前辈看下是否是我的测试url本身就是错的还是是yii没配置好,多谢

    回复于 2015-09-23 15:18 回复

    url 中的username=test , 是要修改的数据吗? put 方法需要把该部分数据装载进请求体, 而非以参数的形式传递.

    回复于 2015-09-23 15:26 回复

    你可以使用 chrome 里面的工具 postman来调试......或者直接 curl

    回复于 2015-09-23 15:55 回复

    我想也是这个地方有错误,但是以前从没用过,前辈可否给我一个详细的示例?

    回复于 2015-09-23 15:56 回复

    我的这个工具和postman差不多,谷歌postman需要翻墙才能用,红杏最近不知怎的用不了~

    回复于 2015-09-23 19:54 回复

    不知道你的什么工具, 各个工具用起来可能也略有差异. 这个帮不了你了 curl -X PUT -d username=test 'http://myblog.luojia.me/rests/3' 这是用curl的命令

    回复于 2015-09-23 19:55 回复

    额 干脆这样 你写段php代码, 用phpcurl函数来完成这个请求好了.

    回复于 2015-09-24 09:51 回复

    函数已写,谢啦

  • 回答于 2015-09-23 13:53 举报

    看了一下代码 'update' => ['PUT', 'PATCH'], 更新。
    而更新$model->load(Yii::$app->getRequest()->getBodyParams(), '');
    值是从bodyparams里面取得。估计直接url传值有问题。

您需要登录后才可以回答。登录 | 立即注册
summer914
主管

summer914

注册时间:2015-07-22
最后登录:2016-02-22
在线时长:7小时55分
  • 粉丝26
  • 金钱405
  • 威望30
  • 积分775

热门问题