以下是我的单元测试中的代码......
public static function member_put($f3,$args) {
// Id is for member: locohost
$f3->mock('PUT /member/c4774904-f15f-11e2-b7e4-00ffe024bd0b', array(
'firstname' => 'Not-Mark',
'lastname' => 'Not-Deibert'
));
}
这是成员模型put方法被调用...
public static function put($f3,$args) {
self::validateArgs($args);
self::validatePost();
self::findById($args['id']);
self::$member->copyFrom('POST');
//var_dump(self::$member);
self::$member->save();
self::returnModel();
}
正在按预期调用Member put方法,但是Member没有从copyFrom('POST')获取新名称字段。 var_dump仍会在名称字段中显示旧值。我做错了什么?
答案 0 :(得分:3)
$ _ POST仅适用于POST方法。 对于其他方法(PUT,PATCH,DELETE)以及POST和GET,http请求体存储在BODY变量中。
因此你的put()函数应如下所示:
public static function put($f3,$args) {
self::validateArgs($args);
self::validatePost();
self::findById($args['id']);
parse_str($f3->get('BODY'),$input);
$f3->set('INPUT',$input);
self::$member->copyFrom('INPUT');
//var_dump(self::$member);
self::$member->save();
self::returnModel();
}
请注意,请求正文采用查询字符串的形式:firstname=Not-Mark&lastname=Not-Deibert
。这就解释了为什么需要使用parse_str进行解析。