覆盖Yii2中的默认休息操作


Override default rest action in Yii2

我在yii2中为用户创建了rest api。我可以访问像"api/web/v1/users"这样的用户列表,但问题是它提供了包括密码在内的所有列的数据,我在yii2文档中看到它在内部调用"user/index"方法,有没有办法像这样覆盖index的方法?

 class UserController extends ActiveController {
 public $modelClass = 'common'models'User';
        public function actionIndex(){
        //return selected columns here of the user table
        }
}

它仍然提供了所有用户的列表以及我不想要的所有列。请帮忙。

在您的情况下,必须使用fields()方法并覆盖此方法。正如Yii定义的fields():

通过重写[[yii''base''Model::fields。您可以覆盖字段()来添加、删除、重命名或重新定义字段

例如:

public function fields()
{
    return [    
        'id','name','username'
    ];
}

上面的方法,告诉yii只显示idnameusername字段。所以,密码永远不会发送到客户端。

如果您只想删除一个或多个特定字段,您可以执行以下操作:

public function fields()
{
    $fields=parent::fields();
    unset($fields['password']);
    return $fields;
}

虽然接受的答案确实有效,并且是了解通过rest和Json::encoder()等通用"对象导出"函数共享哪些字段的基本控制的重要方法,但我觉得了解如何完全覆盖OP引用等操作也很重要。

我在这里回答了这个问题:https://stackoverflow.com/a/50744982/3337682,我觉得这会很有帮助,为OP.添加信息

希望这能帮助到别人!

~干杯:)