将 $user 对象传递给模板文件

Pass $user object to a template file

我使用 layouts.app 作为我所有视图的模板文件。我想将用户发送到其经过身份验证的用户配置文件(在我菜单右上角的下拉列表中),如下所示:

<ul class="dropdown-menu" role="menu">
    <li>
        <a href="{{ url('/users/' . $users->id) }}">@lang('user.profile')</a>
    </li>
</ul>

很遗憾,$users 未定义。如果没有控制器,我将如何定义 $users

解法:

<ul class="dropdown-menu" role="menu">
    <li>
        <a href="{{ url('/users/' . auth()->user()->id) }}">@lang('user.profile')</a>
    </li>
</ul>

您始终可以在 blade 视图中访问 Auth facade。

{{ url('/users/' . Auth::user()->id) }}

但是您应该确保用户确实已登录。

@if(Auth::user())
   ... stuff you want to show ...
@endif

除了门面,您当然可以将任何您想要的内容传递给您的视图/模板。通常你在你的控制器中这样做。作为附加的快速概览:

  • 您的路由捕获请求并调用控制器函数或直接响应

例如:

// respond directly within route definition
Route::get('/', function() {
    return view('home');
});

您有多个选项可以在此处添加值。

return view('home')->with(['user' => Auth::user()]);

$user = Auth::user();
return view('home', compact('user'));

return view('home', ['user' => Auth::user()]);

这三种方法都允许您从视图中访问 $user。但是,不要忘记如果用户未登录,Auth::user() 可能为 null。因此请始终在外部 if 子句中检查它。