在Laravel中一次获取模型的指定属性

时间:2016-05-19 10:01:57

标签: php laravel

我想将一些用户数据传递给视图,以便它可以显示在配置文件页面中。它有很多,但我不想只传递所有内容,因为视图中有一些东西无法访问。所以我的代码看起来像这样:

return view('profile', [
    'username' => Auth::user()->username,
    'email' => Auth::user()->email,
    'firstname' => Auth::user()->firstname,
    'country' => Auth::user()->country,
    'city' => Auth::user()->city->name,
    'sex' => Auth::user()->sex,
    'orientation' => Auth::user()->orientation,
    'age' => Auth::user()->age,
    'children' => Auth::user()->children,
    'drinking' => Auth::user()->drinking,
    'smoking' => Auth::user()->smoking,
    'living' => Auth::user()->living,
    'about' => Auth::user()->about,
]);

我的问题是:这可以写得更短/更简单吗?

谢谢!

修改

我不希望这样:{{ Auth::user()->firstname }}因为视图中存在逻辑,这很糟糕 - 我认为,应该只显示普通变量,而不是其他任何东西。

所以我正在寻找类似的东西:

return view('profile', Auth::user()->only(['firstname', 'email', ...]));

2 个答案:

答案 0 :(得分:1)

您可以自己创建一个名为getPublicData的方法,然后返回所需的所有属性。

...
public function getPublicData() {
    return [
        'property_name' => $this->property_name
    ];
}
...

...然后在您的控制器/视图中使用它。也许它不是最佳解决方案,但你可以在模型中隔离这个东西,避免控制器中的代码过多。

另一种高级方法可能是覆盖__get方法。但是,I am not the first in this case

希望它有所帮助!

答案 1 :(得分:-2)

您不需要将这些变量传递给视图,您可以使用刀片在视图中直接访问它们

<h1>{{ Auth::user()->username }}</h1>