php – 从Zend Framework 2中的路由获取$_GET参数
Zend Framework 1有一种非常简单的方法来解析URL路由并在$_GET超全局中设置找到的params以便于访问.当然,你可以在控制器中使用 – > getParam($something),但如果在URL中找到了param,它也可以通过$_GET访问.
url 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还不是一个对象,不能从控制器的构造函数调用)? 调用$_GET = $this-> getEvent() – > getRouteMatch() – > getParam(‘someparam’);在我的每一个控制器都可以工作,但我不希望这样. 换句话说,按照上面的示例URL,我希望能够执行$_GET [‘someparam’]并仍然在应用程序的任何组件中获得值“5”. 编辑:看起来我不够清楚,所以我会尝试澄清一些.我希望我通过/ key / value格式在URL中输入的任何参数立即在$_GET中可用.获取参数时我真的没有问题,我知道如何获得它并且我扩展了Zend的控制器,所以我可以像ZF1一样再次调用$this-> getParams,现在所有控制器都扩展了那个,我只是希望URL中的参数自动也在$_GET中,因此我可以在本地使用$_GET的第三方组件中轻松访问它们. 编辑2:更新为对Samuel Herzog的回答: 我在抽象控制器中做了以下方法:
首先,如果您正在构建面向对象的堆栈,则不应直接使用$_GET或任何其他超全局. SRP以这种方式失效.
如果你没有可能改变你的(第三方?)图书馆的方式来改变你可能想要挂钩到MvcEvent,听–event–然后得到RouteMatch,你可以用一个简单的循环来填充$_GET . 对于性能最佳的答案,您应该知道每个操作是否需要命名库,仅针对一个模块,还是仅针对某些控制器/操作. 第一种方法的一些示例代码: namespace YourModule; use ZendEventManagerEventInterface as Event; use ZendMvcMvcEvent; class Module { ... public function onBootstrap(Event $ev) { $application = $e->getApplication(); $eventManager = $application->getEventManager(); $eventManager->attach('route',function(MvcEvent $mvcEvent) { $params = $mvcEvent->getRouteMatch()->getParams(); foreach ( $params as $name => $value ) { if ( ! isset($_GET[$name]) { $_GET[$name] = $value; } } }); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |