2009-04-20 7 views
0

Ce que j'essaie de faire est de passer $ rest-> apikey à mon Zend_Rest_Server. empAction crée le tableau requis par Zend_Rest_Server. Mais dans getByShortname ($ id, $ apikey), je ne peux pas lire le $ apikey. Ils interrogent pour vérifier que la clé de l'API ne renvoie aucun résultat.Zend_Rest_Server + Zend_Rest_Client, variable non lue

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

MISE À JOUR: cela semble fonctionner. Je reçois une sortie XML valide avec cette

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

Mais si je l'utilise au-dessus du Zend_Rest_Client, le apikey est pas lu.

+0

Je pense que vous avez manqué du code. D'où vient l'identifiant pour le getByShortname? Cela ne doit-il pas être $ shortname? –

+0

J'ai édité le getByEmployee ($ id) pour getByEmployeeByShortname ($ shortname) ... où $ shortname est passé dans la fonction – wenbert

Répondre

0

Source: http://framework.zend.com/manual/en/zend.rest.client.html Section 44.2.3. Demande Arguments

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

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

// or 

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

Les deux méthodes dans l'exemple ci-dessus, seront les résultats suivants se args:

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

Vous remarquerez que le premier appel de

$client->arg('value1'); 

a donné lieu à les deux

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

Zend_Rest_Server peut ainsi comprendre la requête correctement, plutôt que d'exiger une connaissance préexistante du service.

Par conséquent:

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

fonctionnerait!

Questions connexes