2014-12-11 18 views
10

Aşağıdaki kod aracılığıyla kullanıcı çıkış yapıyorum. bu beni gösteriyor logout olarakYii2: Oturum kapatma sırasında kullanıcı izin verilmiyor (# 405)

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

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

:

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

Benim denetleyicisi kodudur: Bu çıkış düğmesi arkasında benim bakış kodudur

Yönteme İzin Verilmiyor. Bu URL yalnızca şu istekte bulunabilir: yöntemleri: POST.

Nedir? İstisna # 405 atılır neden bu eylem sadece POST yöntemi ile talep anlamına gelir ve GET ile talebinde

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

ki: sen VerbFilter senin SiteController yılında logout eylem bağlı olması gibi

cevap

33

görünüyor.

VerbFilter bu kaldırmak veya POST ile istemek için data-method öznitelik eklemek Ya:

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

Güncelleme: Bu sorunun diğer nedeni yii\web\YiiAsset için bağımlılık eksik olabilir. o AppAsset dahil emin olun:

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

YiiAsset sağlar data-method az kod yazarak eylem post ile biçimi olarak hareket bağlantı imkanı verir nitelik özelliği. Varlık olmadan bağlantı açıkça link olarak hareket eder ve standart GET talebi gönderilir.

+1

İlk önce denendi. ama ikincisi iyidir ... teşekkürler –

+0

Birden fazla düzen kullanıyorsanız, ilk önce deneyebilirsiniz .... – Shaggie

+0

çalışmıyor ... –

0

u görünüm kodunu değiştirmek ve

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

bu bir yerine echo:

<?= 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',]]) 
     ?> 
0

menüleri oluşturmak için Nav::widget kullanıyorsanız, oturum kapatma öğesi linkOptions belirtilen olmalıdır:

[ 
    'label' => '<i class="fa fa-sign-out"></i>Logout', 
    'url' => ['/logout'], 
    'linkOptions' => ['data-method' => 'post'], 
], 
1

Özel bir şablon da kullanabilirsiniz

     'items' => [ 
         [ 
          'label' => 'Logout', 
          'url' => ['/user/security/logout'], 
          'template' => '<a href="{url}" data-method="post">{label}</a>', 
         ], 
        ] 
İlgili konular