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では、このバグは修正されている。