【问题标题】:Zend Framework 2: Dynamic navigation and breadcrumbsZend Framework 2:动态导航和面包屑
【发布时间】:2015-12-18 19:20:47
【问题描述】:

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

我试过这个:

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

但这会返回整个网址。 例如,我有一个这样的网址

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

我需要知道 id。

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

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',
                ),
            )
        )
    )
);

只要路由不包含参数,一切都可以正常工作。如果我的 url 包含一个 ID 参数,我的菜单链接和面包屑只是由没有 ID 的控制器和动作组成。

所以,而不是:

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

我的链接如下:

www.mysite.com/posts/edit

【问题讨论】:

  • 你为什么要这样做? config/autoload 文件夹中的全局和本地文件应该用于声明常量,而不是用于动态内容。如果你这样做,你会遇到麻烦。如果您不添加更多关于您想要实现的目标的详细信息,则很难提供替代解决方案......
  • 在路由发生之前加载配置。你将无法做到这一点。
  • @Wilt 我编辑了我的帖子。
  • @TimFountain 谢谢,我会尝试寻找其他解决方案

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


【解决方案1】:

您正在寻找的是动态面包屑。将面包屑与路由参数绑定并不常见,但您可以找到答案为 here on stackoverflow 的问题。

正如the documentation here 中所写,自 ZF2 版本 2.2.0 起,您可以将 'useRouteMatch' 标志设置为 true

从 2.2.0 版本开始,如果您想在生成链接时重复使用任何匹配的路由参数,您可以通过“useRouteMatch”标志来实现。这在创建包含当前选择的语言或区域设置作为初始段的段路由时特别有用,因为它确保生成的链接都包含匹配的值。

导航器将使用来自RouteMatchparams,而不是手动传递您的params 数组。因此,您的 id 也将可用。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多