2

我遇到了一个我目前不了解框架功能的问题。我想设置一个ViewHelper根据我所在的站点返回输出的设置。如果我匹配两个特定的routesor 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零件需要可变。它应该是foobar。两者都foo可以barchild_routesfoo/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";
}
4

2 回答 2

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);
于 2012-12-27T14:07:58.283 回答
1

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

$serviceLocator->get('Application')->getMvcEvent()->getRouteMatch();

于 2013-01-11T09:15:16.263 回答