【问题标题】:how to share data to all view in laravel 5.7如何在 laravel 5.7 中将数据共享给所有视图
【发布时间】:2019-04-19 12:42:07
【问题描述】:

我有一个登录表单。我希望当用户登录成功时,我的控制器将选择该用户的数据并共享给所有视图。

我阅读了 laravel 文档。 [This][1] 建议我使用 "View::share('key', 'value');" 在 AppServiceProvider 的启动方法中,但我不知道如何在我的控制器中调用它

我的控制器:

if( Auth::attempt(['mssv' => $username,'password' =>$password])) {
                $user=SinhVien::where('mssv',$username)->first();

       //i want to share $user to all view in here

                $success = new MessageBag(['successlogin' => 'Login Success]);
                return redirect()->back()->withErrors($success);
            }
else {
            $errors = new MessageBag(['errorlogin' => 'Login Fail']);
            return redirect()->back()->withErrors($errors);
        }

在所有视图刀片中,我使用:

{{$user->name}}

请帮忙! [1]:https://laravel.com/docs/5.7/views#sharing-data-with-all-views

【问题讨论】:

  • 只需在您的父布局或标题中使用它。 laravel.com/docs/5.7/blade#template-inheritance
  • 作为@if(auth()->user) {{ auth()->user->name }} @else <button>login</button> @endif使用
  • 我读了@OmarAbdullah,就像我在问题中提到的那样。但我不知道如何在我的控制器中调用它
  • 先回答这个问题。为什么需要将其分享给所有视图?所以我们在同一个页面上
  • 因为我想在所有视图中显示它。我共享数据时如何使用它,这不是身份验证

标签: laravel laravel-5 laravel-blade laravel-5.7


【解决方案1】:
<!-- Stored in resources/views/layouts/app.blade.php -->

<html>
<head>
    <title>App Name - @yield('title')</title>
</head>
<body>
    <header>
     <div>
      @if(auth()->user()) 
          {{ auth()->user()->name }} 
       @else 
           <button>login</button> 
      @endif
      <div>
   </header>

    <div class="container">
        @yield('content')
    </div>
</body>

编辑:

{{ auth()-&gt;user-&gt;name }} 已更正 -> {{ auth()-&gt;user()-&gt;name }}

【讨论】:

  • user in auth() 是一个方法,而不是一个属性。你错过了()
【解决方案2】:

然后,在您的刀片中,您可以从您输入的View::share('key', 'value'); 访问key AppServiceProvider

因此,如果密钥是 user,那么在您的刀片中,您只需使用 $user 变量。

【讨论】:

  • 如何从我的控制器把它放到 AppServiceProvider 中
  • 你不要把它从控制器里放出来。最需要这样做的例子是当前登录的用户,但它可以是任何东西。在您的AppServiceProvider 中,您执行查询以从数据库中获取您需要的任何数据,然后执行View::share。因此,如果您在控制器中更新用户(例如名称),您的 AppServiceProvider 应该会自动选择它。
  • 在我的问题中,我在控制器中选择了用户的数据,我想将其分享给所有视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2018-09-14
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多