Symfony2 KnpMenuBundle:设置一个菜单项,即使它不在该菜单上

时间:2013-02-03 16:54:07

标签: php symfony symfony-2.1 knpmenubundle

我创建了我的菜单构建器并且它有效。 我的一条路线是

/database

但这有一条儿童路线:

database/view/{id}

我不想将视图路由放入菜单项,因为没有ID它将无法工作。

但我希望当用户在视图上时数据库路由处于活动状态。

我该怎么做?

3 个答案:

答案 0 :(得分:9)

通过这个小黑客来解决它:

添加所有子项后,在menuBuider中

但在返回菜单之前我添加了

$request = $this->container->get('request');
        $routeName = $request->get('_route');
        switch ($routeName)
        {
            case 'battlemamono_database_view_by_name':
            case 'battlemamono_database_view_by_id':
                $database->setCurrent(true);
                break;
        }

检查路线并将所需菜单设置为活动状态。

答案 1 :(得分:5)

没有记录,但正确的做法是现在(ex):

        $menu->addChild('Category', [
            'route' => 'category_show',
            'routeParameters' => ['slug' => $category->getSlug()],
            'extras' => [
                'routes' => [
                    [
                        'route' => 'thread_show',
                        'parameters' => ['categorySlug' => $category->getSlug()]
                    ],
                ],
            ],
        ]);

如果您不需要参数,可以跳过参数。

答案 2 :(得分:0)

$menu->addChild('Item name', ['route' => 'item_route'])时,值['extras']['routes'][0] = 'item_route'被添加到当前子项。

因此,您需要将到['extra']['routes'] = []数组的路由添加到子级

很简单。有三种方法可以做到这一点:

  1. 我推荐这种方式。'extras'数组将被合并(无需在'route'中复制当前的'routes'):

    $menu->addChild('Item name', [
        'route' => 'item_route', // The item link in the menu
        'extras' => [
            // Set current (active) if route matches one of the set (including route from key 'route')
            'routes' => [ 
                'item_route_inner_1',
                'item_route_inner_2',
                'item_route_outside_1',
            ],
        ],
    ]);
    
  2. ->setExtra(key, value)'extras'数组中,整个值将被键替换(当出于某些原因您不需要到达route中指定的路径时,此键很有用。 ):

    $menu->addChild('Point name', [
        'route' => 'point_route', // route point (on click)
    ])
    // In the 'extras' array, the entire value will be replaced by the 'routes' key
    ->setExtra(
        'routes', [ // Set current (active) if route matches one of the set
            'point_route', // Can be removed, if necessary
            'point_route_inner_1',
            'point_route_inner_2',
            'point_route_outside_1',
        ]
    );
    
  3. ->setExtras(['routes'] => value) 'extras'数组将被完全替换。 请非常小心!

    $menu->addChild('Point name', [
        'route' => 'point_route', // route point (on click)
    ])
    // The 'extras' array will be completely replaced
    ->setExtras([
        'routes' => [
            'point_route', // Can be removed, if necessary
            'point_route_inner_1',
            'point_route_inner_2',
            'point_route_outside_1',
        ]
    ]);