Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2:如何获取当前url引用人对应的路由?_Php_Routing_Zend Framework2 - Fatal编程技术网

Php ZF2:如何获取当前url引用人对应的路由?

Php ZF2:如何获取当前url引用人对应的路由?,php,routing,zend-framework2,Php,Routing,Zend Framework2,对于我的问题,我没有从谷歌或SO那里找到任何答案,所以我决定提问。 有没有一种简单的方法可以获取与当前url的引用者对应的路由参数 我处于控制器操作的上下文中,因此我可以访问$request和$response对象。我实际上是通过以下方式检索推荐人: $referer = $request->getHeader('referer'); $refererUri = $referer->getUri(); 'productAdd' => array(

对于我的问题,我没有从谷歌或SO那里找到任何答案,所以我决定提问。 有没有一种简单的方法可以获取与当前url的引用者对应的路由参数

我处于控制器操作的上下文中,因此我可以访问$request$response对象。我实际上是通过以下方式检索推荐人:

$referer = $request->getHeader('referer');
$refererUri = $referer->getUri();
'productAdd' => array(
                    'type' => 'literal',
                    'options' => array(
                        'route' => '/product/add',
                        'defaults' => array(
                            'controller' => 'Module\\Controller\\Product',
                            'action' => 'add',
                            'connect' => true
                        ),
                        'spec' => '/add',
                    ),
                ),
我真正想知道的是,我在$refererUri变量中得到的url是否与一个路由匹配,该路由的“connect”参数定义为true,路由定义如下:

$referer = $request->getHeader('referer');
$refererUri = $referer->getUri();
'productAdd' => array(
                    'type' => 'literal',
                    'options' => array(
                        'route' => '/product/add',
                        'defaults' => array(
                            'controller' => 'Module\\Controller\\Product',
                            'action' => 'add',
                            'connect' => true
                        ),
                        'spec' => '/add',
                    ),
                ),
现在我在$refererUri变量中得到了一个URL,如

http://local.example.com/dir/product/add
我已经考虑过的解决方案是从URL实例化一个请求对象,然后从请求对象实例化一个路由对象,这将告诉我它是否匹配。然后,如果我得到一个RouteMatch对象作为回报,我将能够得到我想要的参数的值

但是对于一个快速的检查来说,这似乎是一个沉重的任务,而且我似乎无法实现这一点,因为路由不是一个我可以轻松实例化的对象

有什么想法吗


编辑:我发现:这似乎与我要求的非常接近,但在提出的第一个答案中,我无法找到$routeStack对象的来源。有什么线索吗?

我终于实现了我的目标,所以我在这里发布了在同样情况下帮助他人的答案;-)

我所做的基本上是:

  • 获取引用URI:

    $referer = $request->getHeader('referer'); $refererUri = $referer->getUri(); $referer=$request->getHeader('referer'); $refererUri=$referer->getUri();
  • 正在实例化来自此URL的请求:

    $refererRequest = new Request(); $refererRequest->setUri($refererUri); $refererRequest=新请求(); $refererRequest->setUri($refererUri);
  • 获取路由器对象:

    $routeStack = $serviceManager->get('Router'); $routeStack=$serviceManager->get('Router')
  • 查找与$refererRequest匹配的路由:

    $match=$routeStack->match($refererRequest)

  • 从我得到的RouteMatch对象中检查我的参数值:

    if ($match instanceof RouteMatch) { $route = $match->getMatchedRouteName(); $connect = $match->getParam('connect'); } if($match instanceof RouteMatch){ $route=$match->getMatchedRouteName(); $connect=$match->getParam('connect'); }
  • 就在这里;-)