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


Globally Hiding Attributes From Array Or JSON Conversion in laravel?

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

class User extends Model {
    protected $hidden = ['password'];
}

这是特定型号的。

有什么方法可以全局隐藏吗?

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

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

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);
    }
}