在RESTAPI yii2上重写POST方法

在RESTAPI yii2上重写POST方法,rest,api,yii,yii2,yii2-api,Rest,Api,Yii,Yii2,Yii2 Api,我必须重写rest yii2上的post请求。 每次我在url v1/availability上发布请求时 我想为管理请求调用actionCreate 这是我的main.php 'urlManager'=>[ “enablePrettyUrl”=>true, 'enableStrictParsing'=>true, 'showScriptName'=>false, “规则”=>[ [ 'class'=>'yii\rest\UrlRule', “控制器”=>[“v1/可用性”], “多元化”=>正

我必须重写rest yii2上的post请求。 每次我在url v1/availability上发布请求时 我想为管理请求调用actionCreate

这是我的main.php

'urlManager'=>[
“enablePrettyUrl”=>true,
'enableStrictParsing'=>true,
'showScriptName'=>false,
“规则”=>[
[
'class'=>'yii\rest\UrlRule',
“控制器”=>[“v1/可用性”],
“多元化”=>正确,
“外部模式”=>[
“发布v1/可用性”=>“v1/可用性/创建”
]
],
'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/controllers/AvailabilityController.php中 我已经

public function actions()
{
$actions=parent::actions();
未设置($actions['view']);
返回数组合并(
$actions,
[
“索引”=>[
'class'=>'yii\rest\IndexAction',
'modelClass'=>this->modelClass,
“checkAccess”=>[$this,“checkAccess”],
'prepareDataProvider'=>[$this'索引']
],
]
);
}
公共函数actionCreate(){
抛出新的\yii\web\HttpException(200,'IT WORKS!',200);
}

有什么想法吗?

在外部添加url规则,如下所示

'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',
            ],
        ],
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
在这里,你需要了解Yii的规则。如果您添加一条如下规则

'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',
            ],
        ],
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
这将为客户端打开许多URL

[
    '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',
]
[
'放置,修补程序用户/'=>'用户/更新',
'删除用户/'=>'用户/删除',
'GET,HEAD users/'=>'user/view',
“发布用户”=>“用户/创建”,
'GET,HEAD users'=>'user/index',
“用户/”=>“用户/选项”,
“用户”=>“用户/选项”,
]
最重要的是,所有URL都将为客户端打开。

因此。。。
[
    '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',
]
有两种方法可以覆盖post

第一种@Irfan-Ali方法 此方法允许在main.php中声明单个调用,并在controller中使用单个函数

第二种方法是 在main.php中声明对可用性的一般调用

'urlManager' => [
        'enablePrettyUrl' => true,
        'enableStrictParsing' => true,
        'showScriptName' => false,
        'rules' => [
            [
                'class' => 'yii\rest\UrlRule',
                'controller' => ['v1/availability'],
                'pluralize' => true,
            ],
        ],
    ],
对于intercept post方法,必须在控制器中重写

public function createAction($id){
    throw new \yii\web\HttpException(200, 'You receive post or put', 200);
}
在这个函数中,如果调用是post,则必须截取,因为您需要执行任何操作

我喜欢第一种方法