对于我的问题,我没有从谷歌或SO那里找到任何答案,所以我决定问。 是否有一种简单的方法可以获得与当前网址引荐来源相对应的路径参数?
我处于控制器操作的上下文中,因此我可以访问 $ request 和 $ response 对象。我实际上是使用以下方法检索引荐来源:
$referer = $request->getHeader('referer');
$refererUri = $referer->getUri();
我真正想要的是知道我在 $ refererUri 变量中的网址是否与具有 “connect” param定义为true,route定义如下:
'productAdd' => array(
'type' => 'literal',
'options' => array(
'route' => '/product/add',
'defaults' => array(
'controller' => 'Module\\Controller\\Product',
'action' => 'add',
'connect' => true
),
'spec' => '/add',
),
),
现在我在$ refererUri变量中输入了一个像
这样的URLhttp://local.example.com/dir/product/add
我已经考虑过的解决方案是从URL实例化一个请求对象,然后从请求对象实例化一个路由对象,这将告诉我它是否匹配。然后,如果我得到一个RouteMatch对象作为回报,我将能够获得我想要的参数的值。
但是对于一个非常快速的检查它似乎很重,而且似乎我无法实现这一点,因为Route不是我可以轻易实例化的对象。
有什么想法吗?
编辑:我发现this post:这似乎与我要求的非常接近,但在提出的第一个答案中,我无法获得 $ routeStack 对象的来源。有线索吗?
答案 0 :(得分:1)
我终于实现了我的目标,所以我发布了在同样情况下帮助其他人的答案; - )
我所做的基本上是:
获取引用URI:
$referer = $request->getHeader('referer'); $refererUri = $referer->getUri();
从此网址发出请求:
$refererRequest = new Request(); $refererRequest->setUri($refererUri);
获取路由器对象:
$routeStack = $serviceManager->get('Router');
查找与$ refererRequest匹配的路线:
$match = $routeStack->match($refererRequest);
从我收到的RouteMatch对象中检查我的参数值:
if ($match instanceof RouteMatch) { $route = $match->getMatchedRouteName(); $connect = $match->getParam('connect'); }
它就是; - )