gpt4 book ai didi

php - KnpMenuBundle 和动态路由参数

转载 作者:可可西里 更新时间:2023-11-01 12:47:36 25 4
gpt4 key购买 nike

我的网站使用 knpmenubundle,这是我的问题:我有这条路线列出的用户列表:/admin/users菜单是这样的:

User (is opened)
list (is active)
add new

在 ListView 中,菜单中的项目“list”如我所愿处于事件状态在添加新 View 中,菜单中的项目“添加新”是事件的,就像我想要的那样

但是,当我想编辑一个已经存在的用户时,我无法激活项目“Users”,因为路由有一个动态参数

这是我网站的结构:

在 src/dn/AdminBundle/Resources/Config/routing.yml 中

# Users
### List
dnAdmin_usersList:
pattern: /users/{page}
defaults: { _controller: dnAdminBundle:User:list, page: 1 }
requirements:
page: \d*

### Edit
dnAdmin_userEdit:
pattern: /user/edit/{id}
defaults: { _controller: dnAdminBundle:User:edit}
requirements:
id: \d+

在 app/ressources/view/layout/html/twig

{{ render(controller("dnAdminBundle:Common:leftMenu")) }}

在 src/dn/AdminBundle/Controller/CommonController

public function leftMenuAction()
{
return $this->render('dnAdminBundle:Common:leftMenu.html.twig');
}

在 src/dn/AdminBundle/Resources/view/Common/leftMenu/html.twig

{{ knp_menu_render('leftMenu', {'template':'dnAdminBundle:Menu:knp_menu.html.twig', 'currentClass':'active', 'ancestorClass':'active'}) }}

在 src/dn/AdminBundle/Resources/config/services.yml 中

services:
dn_admin.menu_builder:
class: dn\AdminBundle\Menu\MenuBuilder
arguments: ["@knp_menu.factory"]

dn_admin.menu.leftMenu:
class: Knp\Menu\MenuItem
factory_service: dn_admin.menu_builder
factory_method: createLeftMenu
arguments: ["@request"]
scope: request
tags:
- { name: knp_menu.menu, alias: leftMenu }

在 src/dn/AdminBundle/Menu/MenuBuilder.php 中命名空间 dn\AdminBundle\Menu;

使用 Knp\Menu\FactoryInterface;使用 Symfony\Component\HttpFoundation\Request;类 MenuBuilder{ 私有(private)$工厂;

/**
* @param FactoryInterface $factory
*/
public function __construct(FactoryInterface $factory)
{
$this->factory = $factory;
}

public function createLeftMenu(Request $request)
{
// root
$menu = $this->factory->createItem('root');
$menu->setChildrenAttributes(array('class' => 'sidebar-menu'));

// Users
$l = $menu->addChild('Users', array(
'uri' => '#',
));
$l->setAttribute('class', 'treeview');
$l->setChildrenAttribute('class', 'treeview-menu');
$l->addChild('Liste', array(
'route' => 'dnAdmin_userList',
));
$l->addChild('Edit', array(
'route' => 'dnAdmin_userEdit',
'routeParameters' => $request->get('id'),
))
->setDisplay(false);
}

但是$request->get('id')返回空字符串

有人知道如何在 knpmenubundle 中获取当前参数吗?

谢谢

最佳答案

如果您的菜单构建器扩展了 ContainerAware,您应该能够访问请求对象。示例:

class Builder extends ContainerAware {
public function mainMenu(FactoryInterface $factory, array $options) {

$request = $this->container->get('request');

$menu = $factory->createItem('root');
$parent = $menu->addChild('Users', array('route' => 'users'));
$parent->addChild('Edit', array('route' => 'user_edit', 'routeParameters' => array('id' => $request->get('id'))));

return $menu;
}

您的用户菜单项应该获得 current_ancestor 类

关于php - KnpMenuBundle 和动态路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com