Zend_Rest_Server + Zend_Rest_Client,变量未读取

发布于 2024-07-18 01:51:14 字数 2371 浏览 6 评论 0原文

我想做的是将 $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。

What i am trying to do is pass $rest->apikey to my Zend_Rest_Server.
The empAction creates the array needed by my Zend_Rest_Server. But in getByShortname($id,$apikey), I cannot read the $apikey. They query to check the API key does not return any results.

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

UPDATE: this seems to work. I get a valid XML output with this

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

But if i use the Zend_Rest_Client above, the apikey is not read.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖公主 2024-07-25 01:51:14

来源: 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();
}

会起作用!

Source: http://framework.zend.com/manual/en/zend.rest.client.html Section 44.2.3. Request 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();

Both of the methods in the example above, will result in the following get args:

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

You will notice that the first call of

$client->arg('value1');

resulted in both

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

this is so that Zend_Rest_Server can understand the request properly, rather than requiring pre-existing knowledge of the service.

Therefore:

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

would work!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文