Visibility Subitems Menu Widget

I got a little suggestion for the Menu widget (yii\widgets\Menu). It would be nice if you could set the visibility of a single submenu as well. What i have to do now is to set the visibility for all the items inside a submenu one by one:

See my example below, what i have to do now:


echo Menu::widget([

    'items' => [

        ['label' => Yii::t('frontend/user', 'Settings'),

            'url' => ['site/index']

        ],

        ['label' => Yii::t('frontend/user', 'Photos'),

            'url' => ['site/index']

        ],

        ['label' => Yii::t('frontend/messages', 'Messages'),

            'url' => ['message/index'],

            'items' => [


                [

                    'label' => Yii::t('frontend/messages', 'Inbox'),

                    'url' => ['message/index'],

                    'visible' => (Yii::$app->controller->getRoute() == 'message/index')

                ],

                [

                    'label' => Yii::t('frontend/messages', 'Sent'),

                    'url' => ['message/index'],

                    'visible' => (Yii::$app->controller->getRoute() == 'message/index')

                ],

                [

                    'label' => Yii::t('frontend/messages', 'Trash'),

                    'url' => ['message/index'],

                    'visible' => (Yii::$app->controller->getRoute() == 'message/index')

                ],


            ],

        ],




    ],

]);

I’m not sure if it’s a good idea though, since it’s acting the same as the ‘main’ items, but off course it’s not logic to set the visibility of the ‘main’ items as well.

Is it not as simple as moving the ‘visible’ option?

This will hide the whole sub-menu:


echo Menu::widget([

    'items' => [

        ['label' => Yii::t('frontend/user', 'Settings'),

            'url' => ['site/index']

        ],

        ['label' => Yii::t('frontend/user', 'Photos'),

            'url' => ['site/index']

        ],

        ['label' => Yii::t('frontend/messages', 'Messages'),

            'url' => ['message/index'],

            // CHANGE HERE

            'visible' => (Yii::$app->controller->getRoute() == 'message/index'),


            'items' => [


                [

                    'label' => Yii::t('frontend/messages', 'Inbox'),

                    'url' => ['message/index']

                ],

                [

                    'label' => Yii::t('frontend/messages', 'Sent'),

                    'url' => ['message/index']

                ],

                [

                    'label' => Yii::t('frontend/messages', 'Trash'),

                    'url' => ['message/index']

                ],


            ],

        ],




    ],

]);

Yes, but it will hide the ‘parent’ item as well, i only want to hide the submenu.