Laravel:仅在某些路径中隐藏模型的属性

Can*_*ike 2 php model hide laravel

如何仅在某些路线中隐藏模型中的某些属性,例如:

我正在使用受保护的$ hidden来隐藏元素,但这会隐藏在我所有的函数或宁静的路线中(索引,显示)

 $hidden = [
  'coachVisibility', 'thumbnail', 'studentVisibility',
  'isHTML', 'studentIndex', 'coachIndex',
  'isURL', 'source', 'path',
  'status', 'updateTime', 'isfolder',
  'parentResource', 'idModifierUser', 'idResourceType',
  'idCreatorUser', 'idCreationCountry', 'user',
  'country', 'resource'
];
Run Code Online (Sandbox Code Playgroud)

我只想隐藏在Index函数中,而在show函数中,我不想隐藏任何东西。

Jos*_*ber 5

您可以addHidden在模型上使用该方法:

class UsersController
{
    public function index ()
    {
        return User::all()->each(function ($user) {
            $user->addHidden([.........]);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦此PR合并,您就可以直接在集合上调用它:

class UsersController
{
    public function index ()
    {
        return User::all()->makeHidden([.........]);
    }
}
Run Code Online (Sandbox Code Playgroud)

根据您的评论,您可以将所有这些字段保留在$hidden模型的属性中,而仅使它们在show方法中可见:

public function show($id)
{
    return CTL_Resource::where('idResource', $id)
        ->with('tags', 'quickTags', 'relatedTo')
        ->firstOrFail()->makeVisible([
            'coachVisibility', 'thumbnail', 'studentVisibility'
        ]);
}
Run Code Online (Sandbox Code Playgroud)