从laravel中的数组或JSON转换全局隐藏属性?

时间:2015-04-01 07:00:57

标签: php laravel laravel-5

有时您可能希望限制模型数组或JSON表单中包含的属性,例如密码。为此,请向模型添加隐藏属性定义:

class User extends Model {

    protected $hidden = ['password'];

}

这是特定于模型的。

是否有任何方法可以全局隐藏?

即,我想隐藏所有模型json结果中的deleted_at和created_by。

1 个答案:

答案 0 :(得分:1)

最简单的方法是创建基本模型。像这样:

class BaseModel extends Model {
    protected $hidden = ['deleted_at', 'created_by'];
}

然后你的所有模特都从那里延伸出来:

class User extends BaseModel {

}

请注意,如果您想为特定模型添加一些隐藏字段,您必须指定这两个全局隐藏属性:

class User extends BaseModel {
    protected $hidden = ['deleted_at', 'created_by', 'password'];
}

如果这困扰你,你可以从构造函数中合并全局属性:

class BaseModel extends Model {
    private $globalHidden = ['deleted_at', 'created_by'];

    public function __construct(array $attributes = array()){
        $this->hidden = array_merge($this->globalHidden, $this->hidden);
        parent::__construct($attributes);
    }
}