从 Zend Framework 2 中的路由获取 $_GET 参数

2024-04-17

Zend Framework 1 有一种非常简单的方法来解析 URL 路由并在 $_GET 超全局中设置找到的参数以便于访问。当然,您可以在控制器内使用 ->getParam($something) ,但如果在 URL 中找到参数,则它是also可通过 $_GET 访问。

网址示例mypage.com/mymodule/mycontroller/myaction/someparam/5:

ZF1

$this->getParam('someparam'); // 5
$_GET['someparam']; // 5

ZF2

$this->getEvent()->getRouteMatch()->getParam('someparam'); // 5
$_GET['someparam'] // undefined index someparam

显然,区别在于 ZF2 不会将路由参数放入 $_GET 超全局中。

如何让它将解析的参数放入 $_GET 超全局中,因为扩展控制器并仅定义一个构造函数来执行此操作是不可能的(因为 RouteMatch 还不是对象,无法从控制器的构造函数调用)?

Calling $_GET = $this->getEvent()->getRouteMatch()->getParam('someparam');在我的每一个控制器中都可以工作,但我不希望这样。

换句话说,按照上面的示例 URL,我希望能够执行 $_GET['someparam'] 并且仍然在应用程序中的任何组件中获取值“5”。

编辑:看来我还不够清楚,所以我会尽力澄清一些。我希望通过 /key/value 格式在 URL 中输入的任何参数都可以立即在 $_GET 中使用。我在获取参数方面确实没有问题,我知道如何获取它,并且我扩展了 Zend 的控制器,这样我就可以像 ZF1 中一样再次调用 $this->getParams ,现在所有控制器都扩展了该控制器,我只是想要URL 中的参数也自动位于 $_GET 中,因此我可以在本机使用 $_GET 的第三方组件中轻松访问它们。

编辑 2:更新为对 Samuel Herzog 答案的反应: 在这种情况下,我真的不介意使 SRP 无效,因为这些库的构建方式使得它们需要直接访问 $_GET - 它们进行自己的过滤并直接依赖于这个超全局。他们还直接获取 $_FILES 和 $_POST 进行处理,这就是他们的代码的工作方式。

我在抽象控制器中创建了以下方法: $this->mergeGet();这基本上使 $_GET 吸收所有路由匹配的参数,并且一切都按预期工作,但是由于每个控制器/操作都需要这些库,因此每次调用该方法可能会很乏味。如果控制器有像 ZF1 那样的 init() 方法就好了……


在ZF2中,我使用这个

$getparams = $this->getRequest()->getQuery();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Zend Framework 2 中的路由获取 $_GET 参数 的相关文章

随机推荐