我正在使用Navigation构建菜单。在我的配置文件中,我正在使用uri(我无法获得路由,控制器,操作正常工作)
'navigation' => array(
'default' => array(
array(
'label' => 'Home',
// not sure why I can't use route, controller, action...
// for now, i'm using uri
'uri' => '/',
),
array(
'label' => 'About us',
'uri' => '/application/intro',
), ...
应用程序模块的路由是默认路由,设置为
'application' => array(
'type' => 'Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
现在,在调用
时,isActive在我的视图中不起作用(部分)<?php foreach ($this->container as $page): ?>
<li <?php echo $page->isActive()? 'class="' . $activeClass . '"' : '' ?>>
...
当我尝试手动执行此操作时,我正在尝试与$ this-&gt; url进行比较。我意识到$ this-&gt; url只返回路由路径。这意味着,在我的例子中,当我在/ application / intro中时,$ this-&gt; url将只返回/ application /并且不会返回“intro”控制器。
我的问题是,如何通过控制器,操作等返回网址?或者我该怎么做才能确保isActive能够正常工作。
提前致谢!
贾斯汀
答案 0 :(得分:1)
来自http://framework.zend.com/manual/2.0/en/modules/zend.navigation.pages.html的文档:
请注意
Zend \ Navigation \ Page \ Uri不会尝试确定是否应该这样做 在调用$ page-&gt; isActive()时处于活动状态。它只是返回什么 当前已设置,因此要使URI页面处于活动状态,您必须手动进行 调用$ page-&gt; setActive()或指定active作为页面选项 构建。
因此,只要您使用uri页面进行导航,这将无效。使用导航路线时究竟什么不起作用?
编辑: 您正在使用“应用程序”路由,因此如果该路由在您的OP中定义,那么它将始终返回/ application,因为它是路由属性设置为/ application的文字路由。你可能想要的是将导航项指向应用程序路由的子路由,那么如果你尝试将路由设置为application / default呢?