0

这是我的单元测试中的代码...

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' 
    )); 
}

这是被调用的成员模型放置方法...

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 仍然在名称字段中显示旧值。我究竟做错了什么?

4

1 回答 1

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解析它。

于 2013-07-20T19:55:11.547 回答