ZF2 Apigility Rest - 无法获得多个参数

时间:2014-05-14 08:36:52

标签: php api rest zend-framework2

我正在使用Apigility来构建我的Rest API。

我想构建能够接受多个参数。如

http://mydomain.com/users/1/activities/4

我现在可以从此页面访问:https://github.com/zfcampus/zf-apigility/issues/10

我已将模块路由编辑为:

'route' => '/users/:users_id/activities[/:activities_id]',

但是,我不知道如何从网址中检索users_id。

我尝试在我的资源php中抓取params

    $evt = $this->getEvent();
    $params = $evt->getParams();
    die(var_dump($params));

但是,这只会返回

object(ArrayObject)#748 (1) {
  ["storage":"ArrayObject":private]=>
  array(1) {
    ["id"]=>
    string(1) "4"
  }
}

我有点困惑。请指教。

谢谢!

3 个答案:

答案 0 :(得分:6)

在Zend Framework 2中,您可以使用RouteMatch来获取路由的参数。对于你的情况,你可以试试这个:

    $e = $this->getEvent();
    $route = $e->getRouteMatch();
    $usr_id = $match->getParam('users_id');

user_id现在位于$usr_id变量中。

希望这会有所帮助!

答案 1 :(得分:1)

在我的控制器中,我得到了这样的参数。

$this->Params('users_id');

您可以通过相同的方式获取活动。或者

$this->getEvent()->getRouteMatch()->getParam('users_id');

如果你的网址是example.com/users?users_id=123&activites_id=123那么你可以通过调用

获得两者
$this->params()->fromQuery()

,结果将是

Array (
    [users_id] => 123
    [activities_id] => 123
)

答案 2 :(得分:0)

最好的方法是这样的,你在一行代码中做了很多事情,就我而言,这是最好的做法:

    $user_id    = (int) $this->params()->fromRoute('users_id', 0);
    $activities_id    = (int) $this->params()->fromRoute('activities_id', 0);
  1. 你知道ID应该是一个整数,所以你要转换它。
  2. 如果users_id不是必需的,则会将其设置为0,然后您可以对...进行检查。

    if (0 === $user_id) {
        //Do some stuff
    }
    
  3. 这就是我几乎所有路线的用途。