Laravel 5 Laravel 5因受保护$Hidden而流血

Laravel 5 Laravel 5因受保护$Hidden而流血,laravel-5,Laravel 5,在我的应用程序/用户中我有以下内容: protected $hidden = ['name', 'password', 'email', 'remember_token','created_at', 'updated_at','api_token','gmail_id','Personal']; 我的理解是,这是用来防止作为模型一部分存储在数据库中的敏感信息泄漏到视图中 但它似乎不起作用 当我从多对多关系查询users表和print\r()my变量时,我可以看到users表中给定行的所有数据,

在我的
应用程序/用户中
我有以下内容:

protected $hidden = ['name', 'password', 'email', 'remember_token','created_at', 'updated_at','api_token','gmail_id','Personal'];
我的理解是,这是用来防止作为模型一部分存储在数据库中的敏感信息泄漏到视图中

但它似乎不起作用

当我从多对多关系查询
users
表和
print\r()
my变量时,我可以看到users表中给定行的所有数据,包括隐藏列

我做错了什么

在控制器中:
$acgressions=User::where('id',Auth::User()->id)->first()->acgressions()->orderBy('Time','desc')->take(1)->get()


在视图中:
{{print\r($aclements)}
在Laravel中
$hidden
在模型中只是指它的JSON表示——当您要求将模型序列化为JSON时,Laravel将生成的JSON


在您的例子中,您只是要求PHP转储从数据库加载的原始值,其中包括隐藏字段。但是,这种转储不在Laravel的知识范围之内,而且是纯PHP,其中as
$hidden
只是一个Laravel构造

变量
$progressions
不在Laravel的范围之内吗?我只是要求php打印
$acgressions
的值,它是使用laravel
get()
生成的,所以我不明白你的意思。@SummerDeveloper-有点;如果Laravel像您所想的那样遵守$hidden,那就意味着它从未将这些值从DB检索到模型中,它们实际上是隐藏/不可见的。但实际上,把它想象成一个告诉Laravel的标志:“可以从数据库中提取我[属性],但在我的模型转换为JSON时不要显示我。”@SummerDeveloper,如果你真的不想从数据库中提取这些列(从而使它们在原始PHP打印调用中不可见)您只需告诉Laravel/Elounce根本不要拉它们,并明确说明您的SQL选择列
User->select(“first\u name”、“last\u name”、“id”)…
etcI认为get()正在将它们转换为JSON,我可以使用什么方法来转储
用户
表,同时考虑
隐藏的
字段,而不必更改所有查询?@SummerDeveloper no
get()
正是具体化SQL数组并从数据库中取回这些记录的方法。它与模型的表示(JSON)无关。由于数组和JSON序列化都尊重
$hidden
,因此,如果您首先通过
toArray()
请求Laravel将原始数组转换为Laravel经过处理的数组,它应该为您进行清理: