我正在尝试使用默认控制器在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
或任何其他方法时获得该结果。
那我怎么能实现呢?
答案 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',
];