Fat Free框架没有更新记录

时间:2013-07-20 19:11:37

标签: put fat-free-framework

以下是我的单元测试中的代码......

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

1 个答案:

答案 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进行解析。