【问题标题】:ZF2: How to get the route corresponding to the current url referrer?ZF2:如何获取当前urlreferrer对应的路由?
【发布时间】:2014-10-27 17:05:24
【问题描述】:

对于我的问题,无论是从谷歌还是从 SO,我都没有找到任何答案,所以我决定问一下。 有没有简单的方法来获取当前url的referrer对应的路由参数?

我在控制器操作的上下文中,所以我可以访问 $request$response 对象。我实际上是使用以下方法检索引荐来源网址:

$referer = $request->getHeader('referer');
$refererUri = $referer->getUri();

我真正想要的是知道我在 $refererUri 变量中得到的 url 是否与具有 "connect" 的路由匹配> 参数定义为真,路由定义如下:

'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 对象作为回报,我将能够获得我想要的参数的值。

但是对于一个非常快速的检查来说,它确实看起来很重,而且我似乎无法实现这一点,因为 Route 不是我可以轻松实例化的对象。

有什么想法吗?

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

【问题讨论】:

    标签: php routing zend-framework2


    【解决方案1】:

    我终于实现了我的目标,所以我发布了帮助处于相同情况的其他人的答案;-)

    我所做的基本上是:

    1. 获取引用 URI:

      $referer = $request->getHeader('referer'); $refererUri = $referer->getUri();
    2. 实例化来自该 URL 的请求:

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

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

      $match = $routeStack->match($refererRequest);
    5. 从我返回的 RouteMatch 对象中检查我的参数值:

      if ($match instanceof RouteMatch) { $route = $match->getMatchedRouteName(); $connect = $match->getParam('connect'); }

    它就在那里;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2011-11-25
      • 2017-03-23
      • 2018-12-13
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多