ZendFramework 1.6.2 Zend_Restのバグを発見

Zend_Restを使ってウェブサービスを使うプログラムを書いている。Zend_Rest_ClientでGETしてもエラーになってしまうのでいろいろ調べた結果、Zend_Rest_Clientにバグを発見した。

ウェブサービスを使うには、デベロッパーキーが必要でパラメータで渡してやる必要があるのだが、どうもキーがないというエラーが返ってくる。

$cli = new Zend_Rest_Clinet('http://api.hogehoge.jp/fugafuga');
$cli->key('012345');
$result = $cli->get(); // <- エラーが返ってくる

ちなみに、以下のようにした場合は正常に動作する。

$cli = new Zend_Rest_Clinet('http://api.hogehoge.jp/fugafuga?key=012345');
$result = $cli->get(); // <- OK

バグを直すにはZend/Rest/Client.phpの__callメソッドを以下のように修正するがある。

public function __call($method, $args)
{
    $methods = array('post', 'get', 'delete', 'put');

    if (in_array(strtolower($method), $methods)) {
        if (!isset($args[0])) {
            $args[0] = $this->_uri->getPath();
        }
        $this->_data['rest'] = 1;
        $data = array_slice($args, 1) + $this->_data;
        $response = $this->{'rest' . $method}($args[0], $data);
        return new Zend_Rest_Client_Result($response->getBody());
    } else {
        // More than one arg means it's definitely a Zend_Rest_Server
        if (sizeof($args) == 1) {
        	if (!isset($this->_data['method'])) {
                    $this->_data['method'] = $method;
                    $this->_data['arg1']  = $args[0];
        	}
		$this->_data[$method] = $args[0]; // <-この行を追加
        } else {
            $this->_data['method'] = $method;
            if (sizeof($args) > 0) {
                foreach ($args as $key => $arg) {
                    $key = 'arg' . $key;
                    $this->_data[$key] = $arg;
                }
            }
        }
        return $this;
    }
}

現在の最新バージョンの1.7では、このバグは修正されている。