在我ZF2应用程序,我有这个导航视图脚本:将ZF2移植到ZF3:如何修改导航视图?
$routeMatch = $this->getHelperPluginManager()
->getServiceLocator()
->get('Application')
->getMvcEvent()
->getRouteMatch();
$currentRoute = $routeMatch instanceof \Zend\Mvc\Router\RouteMatch ? $routeMatch->getMatchedRouteName() : null;
?>
<?php foreach ($this->container as $page) : ?>
<li <?php echo $currentRoute == $page->getRoute() ? ' class="active"' : null;?>>
<?php echo $this->navigation()->menu()->htmlify($page, true, false) . PHP_EOL; ?>
</li>
<?php endforeach; ?>
由于getServiceLocator()
现在已经过时,我需要另一种方式来获取有关当前的路线进入导航视图脚本的信息。
这一观点得到脚本设置部分,并呼吁在layout.phtml
:
echo $this->navigation('navigation')->menu()->setPartial('navigation/default');
所以我得到了主意,通过通过模板变量需要的信息。我创建了一个在Module#onDispatch(...)
:
public function onDispatch(MvcEvent $mvcEvent)
{
$viewModel = $mvcEvent->getApplication()->getMvcEvent()->getViewModel();
$routeMatch = $mvcEvent->getRouteMatch();
$viewModel->currentRoute = $routeMatch instanceof RouteMatch
? $routeMatch->getMatchedRouteName() : null
;
}
现在我可以在layout.phtml
访问它。但我没有找到一种方法将它传递给导航视图脚本,因为Zend\View\Helper\Navigation\Menu#setPartial(...)
`不接受变量的任何参数。
如何将变量(特别是关于当前路径的信息)传递给Zend Framework 3中的导航视图?
感谢您的回答,但它已经在工作。问题在于''active''属性的设置,并且通常会将变量传递到导航视图脚本中。 – automatix
您随时欢迎您!很高兴已经做到了! – unclexo
再次感谢您的回答!它解决了这个问题。 – automatix