Задать вопрос

Правильно ли так использовать стандартный виджет Menu в yii2?

Решил избавиться от бутстраповских виджетов меню и использовать простой 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 вывести форму, а не код текстом.

Гугл ввел меня в ступор отсутствием такого простого решения, от чего у меня и возникли сомнения, правильно ли так делать?
  • Вопрос задан
  • 328 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
shakatakas
@shakatakas
So so developer
[
    'label' => 'Выход',
    'url' => ['/site/logout'],
     'template' => '<a href="{url}" data-method="post">{label}</a>'
],
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы