Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2:注销用户时不允许使用方法(#405)_Yii2 - Fatal编程技术网

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与action
post
链接起来。如果没有资源,链接将作为常规链接,并发送标准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>',],