2009-04-20 6 views
0

제가하려는 것은 $ rest-> apikey를 내 Zend_Rest_Server에 전달하는 것입니다. 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.

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

당신은

$client->arg('value1'); 

의 첫 번째 호출 결과 통지합니다 : 요청 인수

$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 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(); 
} 

작동 것입니다!