如何在Yii2中进行自定义功能和响应?

时间:2015-01-28 11:37:52

标签: api rest yii2

目前我在Yii2框架上玩REST API。我已经建立了基本功能并取消了一些主题。

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上获得产品ID 1 并返回:

<response>
        <id>1</id>
        <product>Product 1</product>
</response>

我也有产品关系表,我希望我的API返回

<response>
        <id>1</id>
        <product>Product 1</product>
        <related>
            <id>2</id>
            <id>5</id>
        </related>
</response>

我不知道如何修改整个功能而不仅仅是数据提供者准备。我需要做2个SQL查询 - 第一个用于获取产品数据,第二个用于获取相关产品和合并主题作为响应。

先谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

您可以在模型中添加fields()extraFields()方法,以按照此处的说明实现此目的:http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields

因此,在您的情况下,您可以使用:

public function extraFields() {
  return ['__relation_name_here__'];
}