我正在尝试创建一个动态可重用菜单,以便在我的应用程序中使用。我有一个非常基本的路由:id在其中代表记录ID。在子菜单中我想要这样:id用于与用户当前正在交互的记录动态替换。请参阅下面的完整详细信息。
这是我的路线
'item' => array(
'type' => 'Literal',
'options' => array(
'route' => '/Item/',
'defaults' => array(
'__NAMESPACE__' => 'ReserveAnything\Item\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '[:action][/][:id]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
),
),
),
这是我的导航文件
return array(
'navigation' => array(
'default' => array(
'overview' => array(
'label' => 'Edit Item',
'route' => 'item/default',
'action' => 'Edit',
'params' => array(
'id' => 0,
)
),
'extras' => array(
'label' => 'Manage Extras',
'route' => 'item/default',
'action' => 'Extras',
'params' => array(
'id' => 0,
),
),
),
);
最后这是我的观点
echo $this->navigation('navigation')->menu();
现在输出
<ul class="navigation">
<li>
<a href="/Item/Edit/0">Edit Item</a>
</li>
<li>
<a href="/Item/Extras/0">Manage Extras</a>
</li>
现在如果我在Id 0上这将是完美的,但是如果我在Id 1(/ Item / Edit / 1)上它显然仍会出现在上面的例子中。如何让菜单更新配置中的Id。我想这可以做到。当我编辑记录Id 1时,我的理想输出将是
<ul class="navigation">
<li>
<a href="/Item/Edit/1">Edit Item</a>
</li>
<li>
<a href="/Item/Extras/1">Manage Extras</a>
</li>
答案 0 :(得分:1)
当我想要一个允许每个登录用户更改其数据的导航项时,我遇到了类似的问题(我需要添加到用户ID的路径)。我解决了它为导航对象添加一个局部。您可以找到有关here的信息。
我是这样做的:
<强> module.config.php 强>
(...)
'template_map' => array(
'navigation' => __DIR__ . '/../view/module/navigation.phtml',
(...)
<强>布局强>
//GET THE PARTIAL
$partial = array( 'navigation', 'module' );
//APPLY THE PARTIAL TO THE MENU (THE NAV CLASS WILL USE IT TO RENDER IT)
$this->navigation( 'admin_navigation' )->menu()->setPartial( $partial );
//WRITE THE MENU
echo $this->navigation( 'admin_navigation' )->menu()
部分档案
此文件中的 $ this 对象将包含 Zend \ View \ Model \ ViewModel 类,其中包含一个包含所有页面的数组。你可以获得其他信息,就像我一样。我使用ZfcUser模块,我可以通过 $ this-&gt; zfcUserIdentity()获取记录的用户ID。
//I GET THE Zend\View\Helper\Url CLASS TO CREATE THE ROUTE AS USUAL
$url = $this->getHelperPluginManager()->get( 'url' );
//LOOP ALL THE PAGES IN THE 'admin_navigation' NAVIGATION MENU
foreach ( $this->container as $page ) {
//USE YOUR CUSTOM HTML TO CREATE THE MENU ITEM
//WHEN I GET TO THE NAVIGATION ITEM WHERE I NEED TO ADD A PARAMETER...
(...)
$href = $url( $page->getRoute(), array( 'userId' => $this->zfcUserIdentity()->getId();
(...)
}
这就是全部。如果你喜欢zf2导航菜单类生成的菜单代码,请从浏览器中复制它并调整你的部分。或者您可以根据需要使用您在问题上发布的输出。
答案 1 :(得分:0)
这是我的解决方案,但这是一个肮脏的混乱......
<强> module.config.php 强>
return array(
'navigation' => array(
'default' => array(
'overview' => array(
'label' => 'Edit Item',
'route' => 'item/default',
'action' => 'Edit',
'params' => array(
'id' => '99',
),
),
),
),
);
<强> page.phtml 强>
$renderNav = $this->navigation()->menu()->render();
echo str_replace('99', $item->getId(), $renderNav);