Zend framework2 无法从zend framework 2中的url获取路由名称

Zend framework2 无法从zend framework 2中的url获取路由名称,zend-framework2,routes,Zend Framework2,Routes,我正在使用Zend Framework 2,这是我的代码: $prevsingletrackurl = $this->getRequest()->getHeader('Referer')->getUri(); 从控制器的方法中定义的代码中,我得到了以前的URL,现在我需要从中了解一些信息,它包含符合我自己要求的路由、控制器和方法。您可以使用路由堆栈本身来尝试匹配它。如果请求对象匹配,它将返回RouteMatch: 使用Zend\Mvc\Router\RouteMatch; $

我正在使用Zend Framework 2,这是我的代码:

$prevsingletrackurl = $this->getRequest()->getHeader('Referer')->getUri();

从控制器的方法中定义的代码中,我得到了以前的URL,现在我需要从中了解一些信息,它包含符合我自己要求的路由、控制器和方法。

您可以使用路由堆栈本身来尝试匹配它。如果请求对象匹配,它将返回RouteMatch:

使用Zend\Mvc\Router\RouteMatch;
$referer=$this->getRequest()->getHeader('referer')->getUri();
$request=clone$this->getRequest();
$request->setUri($referer);
$match=$routeStack->match($request);
if($match instanceof RouteMatch){
$route=$match->getMatchedRouteName();
}
您可以从服务定位器访问路由堆栈(“路由器”);在根服务定位器中,它注册为“路由器”。您可以在工厂中注入路由堆栈。例如,在控制器中:

使用MyModule\Controller\MyController;
使用Zend\ServiceManager\FactoryInterface;
使用Zend\ServiceManager\ServiceLocator接口;
类MyControllerFactory实现FactoryInterface
{
公共函数createService(ServiceLocatorInterface$sl)
{
$router=$sl->getServiceLocator()->get('router');
$controller=新的MyController($router);
返回$controller;
}
}
在控制器中使用它,如下所示:

使用Zend\Mvc\Controller\AbstractActionController;
使用Zend\Mvc\Router\Http\TreeRouteStack;
类MyController扩展了AbstractActionController
{
受保护的路由器;
公共功能构造(TreeRouteStack$路由器)
{
$this->router=$router;
}
受保护的函数getRouter()
{
返回$this->router;
}
}

我在控制器操作方法中使用的这段代码

$request=$this->getRequest(); $getHeaderReferer=$request->getHeader('Referer')

if(!empty($getHeaderReferer))
{
$prevsingletrackurl=$getHeaderReferer->getUri();//获取上一个url
//echo“
先前的usrl=>”$prevsingletrackurl; $controller=$this->getEvent()->getRouteMatch()->getParam('controller');//获取控制器名称 //****获取上一个url路由、控制器名称、操作/方法名称的代码 $request->setUri($prevsingletrackurl); $router=$this->getServiceLocator()->get('router');//这给出了/Zend/Mv/router/Http/TreeRouteStack的实例 //echo“
路由器=>”$router->toString(); $routeMatch=$router->match($request);//这给出了/Zend/Mv/router/Http/routeMatch的实例 $routename=“”; if($routeMatch instanceof routeMatch) { $urlwholeroutedataAr=$routeMatch->getParams(); 如果(!empty($urlwholeroutedataAr)) { $controllerdata=$urlwholeroutedataAr['controller']; $actionmethod=$urlwholeroutedataAr['action']; 如果(数组\键\存在('trackdata',$urlwholeroutedataAr)) { $trackdata=$urlwholeroutedataAr['trackdata']; } $controllerdata=爆炸(“\\”,$controllerdata); 如果(计数($controllerdataAr)>0) { $controllername=结束($controllerdataAr); } } $routename=$routeMatch->getMatchedRouteName(); } }
      if (!empty($getHeaderReferer))
      {


           $prevsingletrackurl = $getHeaderReferer->getUri(); //  get previous url
             //echo "<br>previous usrl=>".$prevsingletrackurl;        
           $controller = $this->getEvent()->getRouteMatch()->getParam('controller'); // get controller name




             //**** code to get previous url route , controller name , action/method name starts


               $request->setUri($prevsingletrackurl);
               $router =$this->getServiceLocator()->get('Router');// this gives instance of /Zend/Mv/Router/Http/TreeRouteStack 

               //echo "<br>router=>".$router->toString();
               $routeMatch = $router->match($request); // this gives instance of /Zend/Mv/Router/Http/RouteMatch

               $routename="";




               if( $routeMatch instanceof RouteMatch )
               {

                     $urlwholeroutedataAr=$routeMatch->getParams();

                    if(!empty($urlwholeroutedataAr))
                    {
                         $controllerdata=$urlwholeroutedataAr['controller'];
                         $actionmethod=$urlwholeroutedataAr['action'];

                         if(array_key_exists('trackdata',$urlwholeroutedataAr))
                         {
                            $trackdata=$urlwholeroutedataAr['trackdata'];
                         }

                          $controllerdataAr=explode("\\",$controllerdata);

                          if(count($controllerdataAr)>0)
                          {
                            $controllername=end($controllerdataAr);
                          }



                    }

                     $routename=$routeMatch->getMatchedRouteName();
                     }
}