如何将Yii2自定义URL规则中的请求方法从GET更改为POST等?

时间:2015-02-15 18:12:11

标签: php yii2

我正在尝试使用默认控制器在Yii2中的RESTfull Web服务中工作。但我遇到的问题是,我无法发送带参数的POST请求。 以下是我的代码:

web.php

中的网址管理器规则
'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => array(
            ['pattern' => 'api/v1/auth/payment/<id:\d+>', 'route' => 'api/v1/auth/payment'],
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        ),
    ],

AuthController.php文件位于controller/api/v1/

namespace app\controllers\api\v1;

use app\controllers\api\v1\components\ApiFunctions;
use Yii;
use yii\web\Controller;


class AuthController extends Controller
{
    public function actionPayment()
    {
        $id = Yii::$app->getRequest()->getQueryParam('id');
        json_encode($id);
    }

}

但是,当我向GET发送http://{url}//api/v1/auth/payment/5请求时,我会收到5的回复。但是我希望在发送POST或任何其他方法时获得该结果。

那我怎么能实现呢?

2 个答案:

答案 0 :(得分:2)

让我告诉你我是如何解决的for my application

我为基本应用程序设置构建的简单应用程序结构是。

------ app

------模块

---------- API

-------------模块

---------------- V1

-------------------控制器

-------------------模型

-------------------等

您可以先完成应用程序设置。

然后在每个控制器中定义动词过滤,或者通过在公共类中定义来对其进行排序,就像我所做的那样here.

然后使用您在urlManager中定义的相同规则,您将能够获取请求查询参数。

希望这有帮助。

答案 1 :(得分:1)

使用

'POST <controller:\w+>s' => '<controller>/create',

查看更多http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html

来自文档

的更多示例
[
    'dashboard' => 'site/index',

    'POST <controller:\w+>s' => '<controller>/create',
    '<controller:\w+>s' => '<controller>/index',

    'PUT <controller:\w+>/<id:\d+>'    => '<controller>/update',
    'DELETE <controller:\w+>/<id:\d+>' => '<controller>/delete',
    '<controller:\w+>/<id:\d+>'        => '<controller>/view',
];