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

呼び出される Member モデルの 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();
}

メンバーの put メソッドは期待どおりに呼び出されていますが、メンバーは 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 に答える