我在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只显示id
,name
,username
字段。所以,密码永远不会发送到客户端。
如果您只想删除一个或多个特定字段,您可以执行以下操作:
public function fields()
{
$fields=parent::fields();
unset($fields['password']);
return $fields;
}
虽然接受的答案确实有效,并且是了解通过rest和Json::encoder()等通用"对象导出"函数共享哪些字段的基本控制的重要方法,但我觉得了解如何完全覆盖OP引用等操作也很重要。
我在这里回答了这个问题:https://stackoverflow.com/a/50744982/3337682,我觉得这会很有帮助,为OP.添加信息
希望这能帮助到别人!
~干杯:)