【问题标题】:ZF2 Apigility Rest - unable to get multiple paramsZF2 Apigility Rest - 无法获取多个参数
【发布时间】:2014-05-14 08:36:51
【问题描述】:

我正在使用 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]',

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

我尝试在我的资源 php 中获取参数

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

但是,那只会返回

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

我有点困惑。请指教。

谢谢!

【问题讨论】:

  • 在我的控制器中,我得到了像这样的参数。 $this->Params('users_id')。同样的方式你可以得到它的活动。或者 $this->getEvent()->getRouteMatch()->getParam('users_id')。

标签: php api rest zend-framework2


【解决方案1】:

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

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

user_id 现在位于 $usr_id 变量中。

【讨论】:

  • 不错!谢谢!我真的完全掌握了所有这些事件、路线等之间的区别。但是,我会掌握它的。
  • 或者简称:$this->getEvent()->getRouteParam('users_id');
【解决方案2】:

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

$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
)

【讨论】:

    【解决方案3】:

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

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

    这就是我几乎所有路线的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多