【问题标题】:Laravel 5.2 - Share data with all viewsLaravel 5.2 - 与所有视图共享数据
【发布时间】:2016-10-31 19:10:01
【问题描述】:

我记录了一个标题用户菜单,每个注册的用户都有一个余额导入,我想在我的标题部分显示这个余额用户登录,我正在尝试使用 VIEW SHARE,像这样但它不起作用好吧:

class AppServiceProvider extends ServiceProvider
{

    public function boot()
    {
        //its just a dummy data object.
        $balance = UserBalance::where('user_id', Auth::id())->first();

        // Sharing -  the error interested this section: 
        view()->share('balance', $balance->balance);
    }

}

我的错误

AppServiceProvider.php 第 23 行中的 ErrorException:试图获取 非对象的属性

line 23 : view()->share('balance', $balance->balance);

菜单用户部分(在我的所有视图布局内):

@if (Auth::guest())
          <li><a href="{{ url('login')}}">Accedi</a></li>
          <li class="item-custom"><a href="{{url('register')}}">Registrati</a></li>
           @else
           <li class="hello-user">
           Ciao {{Auth::user()->name}}
           </li>
           <li> Your Balance: {{$balance}}</li>
@endif

感谢您的帮助!

【问题讨论】:

  • 因为 AppServiceProvider 引导方法首先工作并且 Auth::id())->first() 返回 null,之后您尝试从 null 中获取余额。

标签: php laravel laravel-blade


【解决方案1】:

这可能不是最好的答案,但您是否考虑过将结果存储在 Session 中?

任何视图都可以检查和读取会话。

if ($request->session()->has('balance')) {
     $request->session()->get('balance', 0);
}

【讨论】:

    【解决方案2】:

    检查用户是否登录。如果用户没有通过Auth::user()-&gt;id 进行身份验证,则不存在,您还需要检查$balance。如果查询返回 null ,则会显示错误。

    AppServiceProvider.php 第 23 行中的 ErrorException:试图获取 非对象的属性

    试试这个:

    class AppServiceProvider extends ServiceProvider
    {
    
        public function boot()
        {
            if(Auth::check()){
               //its just a dummy data object.
               $balance = UserBalance::where('user_id', Auth::user()->id)->first();
    
                // Sharing -  the error interested this section: 
                view()->share('balance', (count($balance) > 0) ? $balance->balance : 0);
            }
        }
    
    }
    

    【讨论】:

    • 我已登录是的!但是 dd(Auth::user()->id) 返回“null”我不知道为什么。
    • 检查dd(Auth::user())
    【解决方案3】:

    您的 Auth::id() 返回 null 或者它不检索会话 ID。因为 Laravel 的 session 是使用 session 中间件处理的,所有的中间件都是在 AppserviceProvider 之前执行的。因此,它不会检索会话 ID。您可以使用此代码。因为 view()->composer clouser 会在视图合成时执行。然后你可以使用会话ID

            public function boot()
            {
                $this->getBalance();
            }
    
            public function getBalance()
            {
                view()->composer('*', function ($view) {
                        $balance = UserBalance::where('user_id', Auth::id())->first();
                        View()->share('balance', $balance->balance);
                });
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2019-04-19
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多