2016-08-14 79 views
1

我添加了一個動詞的動詞行爲只允許POST請求的一些行動,如果請求不是一個POST它應該返回方法不允許,但這是行不通的它返回404未找到響應不是405不允許響應,當我發送一個GET請求而不是POST請任何幫助自定義動作動詞不工作在yii2 REST API

我在REST設置控制的行爲,如該

public function behaviors() 
{ 
    $behaviors = parent::behaviors(); 
    $behaviors['authenticator'] = [ 
     'class' => CompositeAuth::className(), 
     'except' => ['login'], 
     'authMethods' => [ 
      HttpBearerAuth::className(), 
     ], 
    ]; 

    $behaviors['verbs'] = [ 
     'class' => \yii\filters\VerbFilter::className(), 
     'actions' => [ 
      //'index' => ['get'], 
      'login' => ['post', 'put'], 
      'view' => ['get'], 
      //'create' => ['get', 'post'], 
      'update' => ['put'], 
      //'delete' => ['post', 'delete'], 
      'delete' => [''], 
      'test', ['post'] 
     ], 
    ]; 

    return $behaviors; 
} 

。 php

'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'enableStrictParsing' => true, 
     'showScriptName' => false, 
     'rules' => [ 
      [ 
       'class' => 'yii\rest\UrlRule', 
       'controller' => ['v1/vendor'], 
       'extraPatterns' => [ 
        'POST,PUT login' => 'login', 
        'POST logout' => 'logout', 
        'POST test' => 'test' 
       ], 
       'tokens' => [ 
        '{id}' => '<id:\\w+>' 
       ] 
      ], 
     ], 
    ] 

所以當我測試,發送GET請求

GET localhost/mywebsite/api/web/v1/vendors/test 

它返回404種不是405狀態,請幫忙

+0

如果你嘗試'POST'請求​​呢? –

+0

它返回200 @EdvinTenovimas – Fadi

回答

-1

從Yii2方針routing:漂亮的網址,嚴格的分析總是拋出\警予\網絡\ NOTFOUND \ HttpException。 你可以更新控制器的beforeAction:

public function beforeAction() { 
    if (Yii::$app->getRequest()->getMethod() != 'POST') { 
      throw new \yii\web\MethodNotAllowedHttpException('Only allow POST request'); 
    } 
}