自定义动作动词不工作在yii2 REST API

自定义动作动词不工作在yii2 REST API

问题描述:

我添加了一个动词的动词行为只允许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

从Yii2方针routing:漂亮的网址,严格的分析总是抛出\警予\网络\ NOTFOUND \ HttpException。 你可以更新控制器的beforeAction:

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