我在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
}
}
它仍然提供了我不想要的所有列的所有用户的列表。请帮忙。
答案 0 :(得分:2)
在您的情况下,您必须使用fields()
方法并覆盖此方法。正如Yii定义fields()
:
通过覆盖[[yii \ base \ Model :: fields()| fields()]]和/或[[yii \ base \ Model :: extraFields()| extraFields()]],您可以指定哪些数据资源中的调用字段可以放入其数组表示中。您可以覆盖字段()以添加,删除,重命名或重新定义字段
例如:
public function fields()
{
return [
'id','name','username'
];
}
上述方法,告诉yii仅显示id
,name
,username
字段。因此,密码永远不会发送给客户。
如果您只想删除一个或多个特定字段,可以执行以下操作:
public function fields()
{
$fields=parent::fields();
unset($fields['password']);
return $fields;
}
答案 1 :(得分:0)
虽然可接受的答案确实有效,并且是了解通过休息和Json :: encode()等常规“对象导出”功能共享哪些字段的基本控制的一种重要方法,但我觉得也很重要的一点是要理解完全覆盖OP引用之类的操作。
我已经在这里回答了这个问题:https://stackoverflow.com/a/50744982/3337682,并且为OP添加了信息,这对我很有帮助。
希望这对某人有帮助!
〜干杯:)