访问ViewHelper中的路由器以匹配路由或child_routes

时间:2012-12-26 22:30:12

标签: routes zend-framework2 view-helpers

我遇到的问题是我目前对框架的功能一无所知。我想设置一个ViewHelper,根据我所在的站点返回输出。如果我匹配两个特定的routeschild_routes,我希望ViewHelper根据该路由输出链接列表。如果我不在那些匹配的路线上,我想什么都不输出。

设置ViewHelper很简单,现在我的ViewHelper看起来像这样:

'factories' => array(
    'myViewHelper' => function($sm) {
        $service = $sm->getServiceLocator()->get('some-doctrine-entity');
        return new \Mynamespace\View\Helper\ViewHelper($service);
    }
)

输出是链接的列表

$this->url('someLink', array('id', $service->getId());

现在我的问题是someLink部分需要变量。它应该是foobarfoobar都可以child_routes foo/index, foo/details, foo/etc,我需要匹配所有{。}}。

所以我的问题是如何写这个

$currentRoute = somehowGetTheCurrentRoute();
if ($currentRoute matching `foo` or `foo/child_routes`
  or is matching `bar` or `bar/child_routes`) {
    echo "im happy";
}

2 个答案:

答案 0 :(得分:3)

您可以在视图助手上定义方法,它假定您有权访问服务管理器。以下是实现问题解决方案的方法:

//$sm is the service manager

$router=$sm->get('Router');
$request=$sm->get('Request');
$routeMatch=$router->match($request);

//get an array of the route params and their values
$routeparams=$routeMatch->getParams();

//get the matched route name
$routename=$routeMatch->getMatchedRouteName();

//The previous parameters can be injected directly into the url plugin call
//$this->url($routename,$routeparams)

//the full path can also be obtained from the router
//(you can test it within a controller)
$path=$router->assemble($routeparams,$options);

答案 1 :(得分:1)

没有新匹配的另一种解决方案

$ serviceLocator->获得( '应用程序') - > getMvcEvent() - > getRouteMatch();