Log out 我的 Controller 代码是: public function acti-6ren">
gpt4 book ai didi

Yii2:注销用户时不允许使用方法(#405)

转载 作者:行者123 更新时间:2023-12-01 17:47:50 25 4
gpt4 key购买 nike

我正在通过以下代码注销用户。这是我在注销按钮后面的 View 代码:

<li>
<a href="<?= Url::to(['site/logout'])?>">
<i class="fa fa-sign-out"></i> Log out
</a>
</li>

我的 Controller 代码是:

public function actionLogout()
{
Yii::$app->user->logout();

$model = new LoginForm();
$this->layout = 'index';
return $this->render('login', ['model' => $model]);
}

在注销中它向我显示:

Method Not Allowed. This url can only handle the following request methods: POST.

这是什么?

最佳答案

似乎您已将 VerbFilter 附加到 SiteController 中的 logout 操作:

/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}

这意味着此操作只能使用 POST 方法请求,而您使用 GET 请求,这就是抛出异常 #405 的原因。

VerbFilter 中删除此属性或添加 data-method 属性以通过 POST 进行请求:

<a href="<?= Url::to(['site/logout'])?>" data-method="post">...</a>

更新:此问题的另一个原因可能是缺少 yii\web\YiiAsset 的依赖项。 。确保它包含在 AppAsset 中:

public $depends = [
'yii\web\YiiAsset',
...
];

YiiAsset 提供 data-method 属性功能,可以通过编写更少的代码将行为作为表单与操作 post 链接起来。如果没有 Assets ,显然链接将充当常规链接,并且将发送标准 GET 请求。

关于Yii2:注销用户时不允许使用方法(#405),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420533/

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