覆盖Yii2中的默认休息操作

时间:2014-11-06 12:48:24

标签: php yii2

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

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

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

2 个答案:

答案 0 :(得分:2)

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

  

通过覆盖[[yii \ base \ Model :: fields()| fields()]]和/或[[yii \ base \ Model :: extraFields()| extraFields()]],您可以指定哪些数据资源中的调用字段可以放入其数组表示中。您可以覆盖字段()以添加,删除,重命名或重新定义字段

例如:

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

上述方法,告诉yii仅显示idnameusername字段。因此,密码永远不会发送给客户。

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

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

答案 1 :(得分:0)

虽然可接受的答案确实有效,并且是了解通过休息和Json :: encode()等常规“对象导出”功能共享哪些字段的基本控制的一种重要方法,但我觉得也很重要的一点是要理解完全覆盖OP引用之类的操作。

我已经在这里回答了这个问题:https://stackoverflow.com/a/50744982/3337682,并且为OP添加了信息,这对我很有帮助。

希望这对某人有帮助!

〜干杯:)