问题:Yii::$app->request->bodyParams;获取不到数据,但Yii::$app->request->get();可以获取。 目的:当实现 RESTful APIs 接口的时候,经常需要获取通过PUT, PATCH或者其他的 request methods 请求方法提交上来的参数。可以通过调用 yii\web\Request::getBodyParam() 方法来获取这些参数。
访问方式:http://my.api.com/v1/objectdata?id=1&name=111 控制器代码如下:
namespace api\modules\v1\controllers;
use yii;
use yii\rest\ActiveController;
use yii\web\Response;
class ObjectdataController extends ActiveController
{
public $modelClass = 'app\models\Objectdata';
public function behaviors() {
$behaviors = parent::behaviors();
//格式化输出
$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_JSON;
return $behaviors;
}
// public $serializer = [
// 'class' => 'yii\rest\Serializer',
// 'collectionEnvelope' => 'items',
// ];
public function actions()
{
$actions = parent::actions(); // TODO: Change the autogenerated stub
//注销
unset($actions['index'], $actions['update'], $actions['create'], $actions['delete'], $actions['view']);
return $actions;
}
public function actionIndex()
{
$request = Yii::$app->request;
// 返回所有参数
$params = $request->bodyParams;
// 返回参数 "id"
$param = $request->getBodyParam('id');
return $param;
}
}
以PUT请求为例,假设body类型是raw,请求主体内容是json格式
request组件配置如下
通过request组件的getBodyParams方法可以正确获取json格式的参数内容
如果依然存在问题,你可以把你的请求方式以curl的代码贴一下
问题: Yii::$app->request->bodyParams;方法获妈不到数据。
访问方式如下:
返回如下:
request配置如下:
get参数的获取,直接用 Yii::$app->getRequest()->get() 方法不可以获取吗?
Yii::$app->getRequest()->get(); 和 Yii::$app->getRequest()->post();方法获取没有问题, 我考虑到前端ajax可能会以GET ,POST,PUT,PATCH 等等这些提交上来的参数,所以打算每个接口都使用Yii::$app->request->bodyParams;获取,不知是否可行。
别外又遇到一个问题,我现在restful API 用多数据库操作,数据库配置如下:
控制器如下:
其中 public $modelClass = 'app\models\ThyStudy';只声明了db库中的表,那么我要声明db2中的表再加一条 public $modelClass2 = 'app\models\ThyStudy2;可行吗?或都有更好的办法? 在你的站里没找到相关文章。
先看第一个问题,接口的行为肯定是实现约定好了,比如你可以约定规则,所有的接口请求方法都是post。不可能说一开始约定get方式,后期改为post了。
第二个问题,$modelClass的声明是为了默认action操作方便,跟db声明没任何关系。
以AR模型映射的数据表模型来看,不可能会出现一个AR模型对象多个数据库的多张数据表,这本身是矛盾的。
这里你配置了多个db,没明白你是哪里有问题?
如果是不知道多个db如何使用,可以用 Yii::$app->db,或者 Yii::$app->db2等操作。
如果多个AR属于多个不同的db,你可以为每一个AR模型单独配置tableName方法和getDb方法
参考如下
明白你的意思了,两个问题:
1。Yii::$app->request->bodyParams;获取不到数据的问题怎么解决呢?
2。如果对方以GET,POST之外的方法如PUT,PATCH等提交请求,我应该以哪种方法获取呢?Yii::$app->getRequest()->get(); 或 Yii::$app->getRequest()->post();?
晕,竟然还没懂。。
get就Yii::$app->getRequest()->get();
post,put,patch 都可以用 Yii::$app->getRequest()->post(); 或者 Yii::$app->getRequest()->getBodyParams() 获取。
客户端请求的Content-Type 类型将影响你具体要获取的方式,比如 x-www-form-urlencoded 以上方法通用。
懂了 ,就是纠结。不是说Yii::$app->request->bodyParams;可以获取所有请求方法的参数,我这个获取不到怎么讲啊?