Yii2:注销用户时不允许使用方法(#405)
我通过以下代码注销用户。这是我在注销按钮后的查看代码:Yii2:注销用户时不允许使用方法(#405),yii2,Yii2,我通过以下代码注销用户。这是我在注销按钮后的查看代码: <li> <a href="<?= Url::to(['site/logout'])?>"> <i class="fa fa-sign-out"></i> Log out </a> </li> 在注销中,它向我显示: 方法不允许。此url只能处理以下请求 方法:后处理 这是什么?您的站点控制器中的注销操作似乎附加了VerbFilter
<li>
<a href="<?= Url::to(['site/logout'])?>">
<i class="fa fa-sign-out"></i> Log out
</a>
</li>
在注销中,它向我显示:
方法不允许。此url只能处理以下请求
方法:后处理
这是什么?您的
站点控制器中的注销操作似乎附加了VerbFilter
:
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
这意味着只能使用POST方法请求此操作,而您使用GET进行请求,这就是抛出异常405的原因
从VerbFilter
中删除此项,或将数据方法
属性添加到POST请求中:
<a href="<?= Url::to(['site/logout'])?>" data-method="post">...</a>
YiiAsset
提供了数据方法
属性功能,通过编写更少的代码,可以将act as a form与actionpost
链接起来。如果没有资源,链接将作为常规链接,并发送标准GET请求。u可以更改查看代码和回显,而不是
<li>
<a href="<?= Url::to(['site/logout'])?>">
<i class="fa fa-sign-out"></i> Log out
</a>
</li>
这个:
<?= Html::a('<i class="fa fa-sign-out"></i>',
['/site/logout'],
['class'=>'btn btn-default btn-flat']), //optional* -if you need to add style
['data' => ['method' => 'post',]])
?>
您只能将'logout'=>['post']替换为'logout'=>['get']。这样你的错误就会得到解决
这种方法仅适用于Yii框架版本2
- 更多信息,请访问:
如果您使用Nav::widget
生成菜单,则注销项应指定linkOptions
:
[
'label' => '<i class="fa fa-sign-out"></i>Logout',
'url' => ['/logout'],
'linkOptions' => ['data-method' => 'post'],
],
[
“标签”=>“注销”,
'url'=>['/logout'],
'linkOptions'=>['data-method'=>'post'],
],
您也可以使用自定义模板
'items' => [
[
'label' => 'Logout',
'url' => ['/user/security/logout'],
'template' => '<a href="{url}" data-method="post">{label}</a>',
],
]
“项目”=>[
[
“标签”=>“注销”,
'url'=>['/user/security/logout'],
'模板'=>'',
],
]
假设您可能需要额外的类和数据方法
属性,那么下面的方法也同样有效
<?=
Html::a(
'Logout (' . Yii::$app->user->identity->username . ')',
['/site/logout'],
['class' => 'ui inverted button', 'data-method' => 'post']
);
?>
此代码适用于AdminLTE模板
['label' => 'Sign out (' . Yii::$app->user->identity->username . ')','url' => ['/site/logout'],'template' => '<a href="{url}" data-method="post">{label}</a>',],
['label'=>'注销('.Yii::$app->user->identity->username.'),'url'=>['/site/logout'],'template'=>'',],
以前尝试过第一个。但第二个是好的…thanksI今天(2015年5月)下载和安装Yi2高级模板时遇到了同样的问题(我昨天才开始学习Yii)。从动词过滤器中删除post要求对我来说是可行的,但是当我检查前端和后端的main.php内部模板时,它们都已经按照@arogachev的第二个建议使用了post方法(比如“linkOptions”=>[“data-method”=>“post”])…那么为什么首先会发生错误呢?我不想取消POST ing注销的要求。@sunny我知道这有点晚了,但请检查加载视图的assetbundle是否包含yii\web\yiiaSet。这是因为data method属性是通过yii的自定义javascript/jquery例程验证的。也许我忘记了给Kartik V打分,我遇到了同样的问题,我用他的建议解决了这个问题。即使yii js代码用于创建表单和发出post请求,data方法也不起作用。但同样的代码在前端工作,但在我的模块中没有。我搞不懂。欢迎来到SO!当你回答一个问题时,试着解释一下。在这种情况下,还有一些其他的回复,所以你应该公开你的个人隐私的利弊。
<?=
Html::a(
'Logout (' . Yii::$app->user->identity->username . ')',
['/site/logout'],
['class' => 'ui inverted button', 'data-method' => 'post']
);
?>
['label' => 'Sign out (' . Yii::$app->user->identity->username . ')','url' => ['/site/logout'],'template' => '<a href="{url}" data-method="post">{label}</a>',],