Zend Framework 2:动态导航和面包屑

时间:2015-12-17 15:57:16

标签: php zend-framework zend-framework2 zend-route

我使用位于config/autoload的全局文件在Zend Framework 2中进行了导航。如何在此全局文件中获取路由参数?

我试过这个:

$helper = new Zend\View\Helper\ServerUrl();
$active_url = $helper->getHost();

但这会返回整个网址。 对于exemle,我有一个这样的网址

www.mysite.com/controller/action/id/3

我需要知道身份证。

我的全局文件返回一个如下所示的导航数组:

return array(
    'navigation' => array(
        'default' => array(
            array(
                'label'      => 'Home',
                'route'      => 'admin',
                'active'     => true,
                'resource'   => 'Admin\Controller\Index',
                'privilege' => 'index',
                'pages'     =>  array(
                    'label'  => 'My posts ',
                    'route'  => 'admin/default',
                    'params' => array(
                        'controller' => 'posts',
                        'action' => 'edit'
                    ),
                    'resource'  => 'Admin\Controller\Posts',
                    'privilege' => 'edit',
                ),
            )
        )
    )
);

只要路线不包含参数,一切正常。如果我的网址包含ID参数,我的菜单链接和面包屑只是与控制器和没有ID的动作形成,并且在同一个地方。

所以,而不是:

www.mysite.com/posts/edit/id/12

我的链接如下:

www.mysite.com/posts/edit

1 个答案:

答案 0 :(得分:1)

您正在寻找的是动态面包屑。将面包屑与路线参数联系起来并不常见,但您可以找到一个带有答案here on stackoverflow的问题。

同样写在the documentation here中,自ZF2 2.2.0版开始,'useRouteMatch'标志就可以设置为true

  

从版本2.2.0开始,如果要在生成链接时重新使用任何匹配的路由参数,可以通过“useRouteMatch”标志执行此操作。在创建包含当前所选语言或区域设置作为初始段的段路由时,这尤其有用,因为它确保生成的链接都包含匹配值。

导航器将使用params中的params,而不是手动传递RouteMatch。因此,您的身份证也可以使用。

array(
    'label' => 'My posts',
    'route' => 'admin/default',
    'useRouteMatch' => true
),

注意您说您在global文件夹的autoload/config文件中定义了导航。最好在module.config.php中实施导航,如图所示here in this tutorial