Api 如何在Yii2中定制函数和响应?
目前我正在Yii2框架上使用RESTAPI。我已经建立了基本功能并取消了一些主题Api 如何在Yii2中定制函数和响应?,api,rest,yii2,Api,Rest,Yii2,目前我正在Yii2框架上使用RESTAPI。我已经建立了基本功能并取消了一些主题 public function actions() { // GET ACTIONS $actions = parent::actions(); // UNSET ACTIONS unset($actions['delete'], $actions['create']); // CUSTOM FUNCTION FOR INDEX $actions['index']['
public function actions()
{
// GET ACTIONS
$actions = parent::actions();
// UNSET ACTIONS
unset($actions['delete'], $actions['create']);
// CUSTOM FUNCTION FOR INDEX
$actions['index']['prepareDataProvider'] = [$this, 'actionIndex'];
return $actions;
}
我添加了自定义函数,目前它只是原始函数的一个副本
public function actionIndex()
{
/* @var $modelClass \yii\db\BaseActiveRecord */
$modelClass = $this->modelClass;
return new ActiveDataProvider([
'query' => $modelClass::find(),
]);
}
这将调用DB表产品。现在我想在localhost/api/v1/products/1
回报是:
<response>
<id>1</id>
<product>Product 1</product>
</response>
1.
产品1
我也有产品的关系表,我想我的API返回
<response>
<id>1</id>
<product>Product 1</product>
<related>
<id>2</id>
<id>5</id>
</related>
</response>
1.
产品1
2.
5.
我不知道如何修改整个函数,而不仅仅是数据提供程序准备。我需要做2个SQL查询——第一个是获取产品数据,第二个是获取相关产品并合并主题作为响应
感谢您在advanced中的回答。您可以在模型中添加fields()
和extraFields()
方法来实现此目的,如下所述:
因此,在您的情况下,您可以使用:
public function extraFields() {
return ['__relation_name_here__'];
}
您不应该为此修改函数,还有另一个函数返回关于1项的详细信息。再次阅读RESTAPI文档。还有哪些函数可以返回详细信息?关于获取详细数据,只有GET和HEAD方法。。。然而,这根本不是我的问题。我想修改返回数据并寻找解决方案的函数。无论退货修改是什么。。。它可以是
状态:0,数据:[data]
您也可以命名返回的字段,在这种情况下,您可以命名为:return['related'=>'\uu relationship\u name\u here']