2009-04-20 6 views
0

私がやっていることは、Zend_Rest_Serverに$ rest-> apikeyを渡すことです。 empActionは、私のZend_Rest_Serverに必要な配列を作成します。しかし、getByShortname($ id、$ apikey)では、私は$ apikeyを読むことができません。彼らはAPIキーをチェックするためのクエリは結果を返しません。Zend_Rest_Server + Zend_Rest_Client、変数が読み取られない

$rest = new Zend_Rest_Client('http://localhsot/api/emp'); 
$rest->method('getByShortname'); 
$rest->id('1124921'); 
$rest->apikey('1234'); 
$result = $rest->get(); 
var_dump($result); //should work 

//--------------------------------------- 
//For Emp method--> api/emp 
//--------------------------------------- 
//... rest of code ... 
public function empAction() 
{ 
    require_once 'EmprestServer.php'; 

    $params = $this->_getAllParams(); 

    unset($params['controller']); 
    unset($params['action']); 
    unset($params['module']); 

    $param_keys = array_keys($params); 
    if($param_keys[0]=='id') { 
     $request = array('method' => 'getById'); 
    } else if($param_keys[0]=='shortname') { 
     $request = array('method' => 'getByShortname'); 
    } 

    foreach($param_keys AS $key) { 
     $request[$key] = $filter_params[$key]; //need to filter key 
     //need better checking 
     if(!$request[$key]) { 
      throw new Exception($request[$key].' contained invalid data.'); 
     } 
    } 

/* 
I am able to generate this array using the code prior to this line... 
    $request = array(); 
    $request['method'] = 'getByShortname'; 
    $request['shortname'] = 'wdelrosa'; 
    $request['apikey'] = '1234'; 
*/ 

    $server = new Zend_Rest_Server(); 
    $server->setClass('EmprestServer'); 
    $server->handle($request); 
} 
//... rest of code ... 
//--------------------------------------- 
//The Class 
//--------------------------------------- 
class EmprestServer 
{ 
    public function getByShortname($shortname,$apikey) 
    { 
     $emp = new Employee(); 
     $data = array(); 

     /** PROBLEM **/ 
     /** I can't access $apikey WHY? Any ideas? **/ 

     if(!$this->checkKey($apikey)) { 
      throw new Exception('Key is invalid.'); 
     } 

     if(!$data = $emp->getEmployeeByShortname($shortname)) throw new Exception('Employee ID not found.'); 
     $data = $data->toArray(); 
     return $data; 
    } 
} 

更新:これはうまくいくようです。私はこれで有効なXML出力を得ます

http://locahost/api/emp/shortname/wdelrosa/apikey/1234 

上記のZend_Rest_Clientを使用すると、apikeyは読み込まれません。

+0

私はあなたがいくつかのコードを逃したと思います。 getByShortnameのIDはどこから来ますか?それはショートネームにする必要はありませんか? –

+0

getByEmployeeByShortname($ shortname)にgetByEmployee($ id)を編集しました。ここで$ shortnameは関数に渡されます – wenbert

答えて

0

出典:http://framework.zend.com/manual/en/zend.rest.client.htmlセクション44.2.3。要求の引数

$client = new Zend_Rest_Client('http://example.org/rest'); 

$client->arg('value1'); 
$client->arg2('value2'); 
$client->get(); 

// or 

$client->arg('value1')->arg2('value2')->get(); 

上記の例の方法はいずれも、引数を取得し、次になります:

?method=arg&arg1=value1&arg=value1&arg2=value2 

あなたは

$client->arg('value1'); 

の最初の呼び出しがもたらしていることがわかります両方とも

method=arg&arg1=value1 and arg=value1; 

これは、Zend_Rest_Serverが、サービスに関する既存の知識を必要とするのではなく、要求を適切に理解できるようにするためです。したがって

$rest = new Zend_Rest_Client('http://example.org/api/emp'); 
$rest->getById(); //this was not here before. This made it work! 
$rest->id('1124921'); 
$rest->apikey('1234'); 
$result = $rest->get(); 
if($result->status()=='success') { 
    echo $result->emp_id() .' '. $result->emp_shortname().' '. $result->status(); 
} else { 
    echo $result->response().' '.$result->status(); 
} 

が働くだろう!

関連する問題