我遇到的问题是我目前对框架的功能一无所知。我想设置一个ViewHelper
,根据我所在的站点返回输出。如果我匹配两个特定的routes
或child_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
部分需要变量。它应该是foo
或bar
。 foo
和bar
都可以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";
}
答案 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();