如何使用更好的方式隐藏laravel模型字段
在我的案例中,我隐藏了我的雄辩领域:如何使用更好的方式隐藏laravel模型字段,laravel,eloquent,Laravel,Eloquent,在我的案例中,我隐藏了我的雄辩领域: public function __construct(array $attributes = array()) { parent::__construct($attributes); $user = auth()->user(); $hiddenFields = []; if(!$user || $user && $user->id !== $this->user_id) {
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
$user = auth()->user();
$hiddenFields = [];
if(!$user || $user && $user->id !== $this->user_id) {
$hiddenFields = [
'phone', 'employees', 'email',
'created_at', 'updated_at', 'id', 'description'
];
}
$this->hidden = array_merge($this->hidden, $hiddenFields);
}
是否可以更好地隐藏字段?您可以直接在模型中使用
$visible
或$hidden
,以便在执行对->toArray()的调用时,不会显示它们
文件:
构造函数中的用户调用将始终看到null,因为所需的中间件尚未运行,请参阅。注意,这假设您已经发布了来自控制器的代码
对于类的其余部分,我个人会添加aminor重构,以使代码更具可读性:
class SomeClassName
{
/**
* @var array
*/
protected $defaultHiddenFields = [
'phone',
'employees',
'email',
'created_at',
'updated_at',
'id',
'description'
];
/**
* @var array
*/
protected $hidden = [];
/**
* @param array $attributes
*/
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->middleware(function ($request, $next) {
$this->user = auth()->user();
return $next($request);
});
$this->hidden = array_merge($this->hidden, $this->getHiddenUserFields());
}
/**
* @return array
*/
private function getHiddenUserFields(): array
{
$validUser = !$this->user || ($this->user && ($this->user->id !== $this->user_id));
return $validUser ? $this->defaultHiddenFields : [];
}
}