如何在 Yii2 中使用 RESTful 模型和控制器过滤记录

How to filter records with RESTful models and controllers in Yii2

我正在使用 Yii2 创建一个 RESTful API,并且已经按照快速入门教程*成功设置了一个名为 Contacts 的模型。我喜欢如何在不创建任何操作的情况下创建、列出、更新和删除记录。

但是我看不到如何过滤结果。我只想 return 联系人,其中 contact.user_id 等于 1(例如),因为它目前将回复所有记录。如果不创建动作,这可能吗?

我也不确定如何限制结果。从我读过的内容来看,我觉得它应该在 URI 后附加 ?limit=5.

尽管我不想,但我不得不重写索引方法。我的解决方案如下所示:

public function actions()
{
    $actions = parent::actions();
    unset($actions['index']);

    return $actions;
}

public function actionIndex()
{
    return Contact::findAll(['user_id' => \Yii::$app()->user-id]);
}

我想这个解决方案意味着我需要编写自己的分页代码,但这是我希望避免的其他事情。

您应该 return 一个支持分页的数据提供程序而不是一组对象。 也许这种方法会更有用:

public function actionIndex() 
{
   return new \yii\data\ActiveDataProvider([
        'query' => Contact::find()->where(['user_id' => \Yii::$app->user-id]),
   ]);
}

您也可以保留索引操作不变,但为预设操作提供 prepareDataProvider-回调:

public function actions()
{
    $actions = parent::actions();
    $actions['index']['prepareDataProvider'] = function($action) 
    {
        return new \yii\data\ActiveDataProvider([
           'query' => Contact::find()->where(['user_id' => \Yii::$app->user-id]),
        ]);
    };

    return $actions;
}

希望对您有所帮助。