Navigation zf2导航是活动的,不使用uri
我正在使用导航构建菜单。在我的配置文件中,我使用的是uri(我无法使路由、控制器和操作正常工作) 应用程序模块的路由是默认路由,设置如下Navigation zf2导航是活动的,不使用uri,navigation,zend-framework2,Navigation,Zend Framework2,我正在使用导航构建菜单。在我的配置文件中,我使用的是uri(我无法使路由、控制器和操作正常工作) 应用程序模块的路由是默认路由,设置如下 'application' => array( 'type' => 'Literal', 'options' => array( 'route' => '/application', 'defaul
'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->url进行比较。我意识到$this->url只返回路由的路径。这意味着,在我的示例中,当我在/application/intro中时,$this->url将只返回/application/,而不返回“intro”控制器
我的问题是,如何使用控制器、操作等返回url。?或者我可以做些什么来确保iActive能够正常工作
提前谢谢
Justin来自以下文档:
注
Zend\Navigation\Page\Uri不会尝试确定是否应该
调用$page->isActive()时处于活动状态。它只是返回什么
当前已设置,因此要使URI页处于活动状态,必须手动
调用$page->setActive()或在以下情况下指定active作为页面选项:
建设
因此,只要您使用uri页面进行导航,这就不会起作用。在使用路线进行导航时,哪些地方不起作用
编辑:
您正在使用“应用程序”路由,因此,如果该路由在OP中定义为,则它将始终返回/application,因为它是一个文本路由,路由属性设置为/application。您可能需要将导航项指向应用程序路由的子路由,因此,如果您尝试将路由设置为application/default,该怎么办?谢谢您的提示Ruben!非常感谢。我将尝试使用$this->url()检查并设置活动(尽管我仍然有问题,因为$this->url()不返回带有控制器的url(/application/而不是/application/intro)。除此之外,我在使用routes时遇到的问题是,控制器和操作没有构建到href。当设置route to application和controller to intro时,getHref()将只返回/application(当我希望获取/application/intro时)。我打赌这是我忽略的愚蠢的事情。有什么提示吗?嗯,让我说清楚。您正在使用“应用程序”路由,因此如果该路由在OP中定义为,那么它将始终返回/application,因为它是一个文本路由,路由属性设置为/application。您可能需要将导航项指向child应用程序路由的路由,那么如果您尝试将路由设置为application/default呢?谢谢Ruben!这肯定解决了它!这花了我几个小时!干杯Ruben!没问题,很高兴我能提供帮助。:)
<?php foreach ($this->container as $page): ?>
<li <?php echo $page->isActive()? 'class="' . $activeClass . '"' : '' ?>>
...