2017-04-13 75 views
0

我必須重寫休息yii2的post請求。 每次我對url v1/availability 發佈請求時,我都想要爲action請求調用actionCreate。重寫休息api的POST方法yii2

這是我的main.php

'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'enableStrictParsing' => true, 
      'showScriptName' => false, 
      'rules' => [ 
       [ 
        'class' => 'yii\rest\UrlRule', 
        'controller' => ['v1/availability'], 
        'pluralize' => true, 
        'extraPatterns' => [ 
         'POST v1/availability' => 'v1/availability/create' 
        ] 
       ], 
       'OPTIONS v1/user/login' => 'v1/user/login', 
       'POST v1/user/login' => 'v1/user/login', 
       'POST v2/user/login' => 'v2/user/login', 
       'OPTIONS v2/user/login' => 'v2/user/login', 
      ], 
     ], 

在V1 /控制器/ AvailabilityController.php 我

public function actions() 
    { 
     $actions = parent::actions(); 
     unset($actions['view']); 
     return array_merge(
      $actions, 
      [ 
       'index' => [ 
        'class' => 'yii\rest\IndexAction', 
        'modelClass' => $this->modelClass, 
        'checkAccess' => [$this, 'checkAccess'], 
        'prepareDataProvider' => [$this, 'index'] 
       ], 
      ] 
     ); 
    } 

public function actionCreate(){ 
     throw new \yii\web\HttpException(200, 'IT WORKS!', 200); 
    } 

任何想法?

回答

1

在下面添加網址規則。

'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'enableStrictParsing' => true, 
      'showScriptName' => false, 
      'rules' => [ 
       [ 
        'class' => 'yii\rest\UrlRule', 
        'controller' => ['v1/availability'] 
       ], 
       'POST v1/availability' => 'v1/availability/create', 
       'OPTIONS v1/user/login' => 'v1/user/login', 
       'POST v1/user/login' => 'v1/user/login', 
       'POST v2/user/login' => 'v2/user/login', 
       'OPTIONS v2/user/login' => 'v2/user/login', 
      ], 
     ], 

在這裏您需要了解Yii的規則。如果你添加一個像下面這樣的規則。

['class' => 'yii\rest\UrlRule', 'controller' => 'user'], 

這爲客戶打開很多網址。

[ 
    'PUT,PATCH users/<id>' => 'user/update', 
    'DELETE users/<id>' => 'user/delete', 
    'GET,HEAD users/<id>' => 'user/view', 
    'POST users' => 'user/create', 
    'GET,HEAD users' => 'user/index', 
    'users/<id>' => 'user/options', 
    'users' => 'user/options', 
] 

以上所有網址都會向客戶開放。

0

所以... 有2種方法來覆蓋帖子。

先@Irfan Ali方法 該方法允許在main.php中聲明單個調用,並在控制器中使用單個函數。

第二種方法是在 聲明main.php用於攔截POST方法而定

'urlManager' => [ 
     'enablePrettyUrl' => true, 
     'enableStrictParsing' => true, 
     'showScriptName' => false, 
     'rules' => [ 
      [ 
       'class' => 'yii\rest\UrlRule', 
       'controller' => ['v1/availability'], 
       'pluralize' => true, 
      ], 
     ], 
    ], 

一般呼叫,您必須在控制器

public function createAction($id){ 
    throw new \yii\web\HttpException(200, 'You receive post or put', 200); 
} 

覆蓋,並在此功能,您必須截取如果通話是發佈你做任何事情。

我愛第一方法!