我要做的是将$ rest-> apikey传递给我的Zend_Rest_Server。 empAction创建了Zend_Rest_Server所需的数组。但是在getByShortname($ id,$ apikey)中,我无法读取$ apikey。他们查询检查API密钥不会返回任何结果。
$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 :(得分: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();
上面示例中的两个方法都将产生以下get args:
?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();
}
会工作!