Решил избавиться от бутстраповских виджетов меню и использовать простой yii\widgets\Menu
Когда дошел до кнопочки Logout, встретился сначала с проблемой - items не принимает значения, которые были написаны для Nav / NavBar:
$menuItems[] = '<li>'
. Html::beginForm(['/site/logout'], 'post')
. Html::submitButton(
'Logout (' . Yii::$app->user->identity->username . ')',
['class' => 'btn btn-link']
)
. Html::endForm()
. '</li>';
Решил переделать как положено:
$menuItems[] = ['label' => 'Выйти('.Yii::$app->user->identity->username.')', 'url' => '/site/logout'];
В следствии чего последовало - Method Not Allowed (#405), дело ясное logout ждет POST.
Начал гуглить и на удивления ни 1 адекватного решения, только предложение изменить logout, что бы он не просил POST и предложение написать свой виджет с кучей писанины, наследованный от Menu.
После прочтения документации по Menu получилось:
$menuItems[] = ['label' => Html::beginForm(['/site/logout'], 'post')
. Html::submitButton('Logout ('. Yii::$app->user->identity->username . ')'), 'encode' => false];
Собственно вся суть в
'encode' => false
, отключение encode позволяет через label вывести форму, а не код текстом.
Гугл ввел меня в ступор отсутствием такого простого решения, от чего у меня и возникли сомнения, правильно ли так делать?