Laravel Pass认证到每个视图

时间:2016-09-11 21:06:53

标签: laravel

我需要将一个集合传递给每个视图;该集合包含用户购物车中的项目的ID。我已经尝试了服务提供商和BaseClass,但两个都没有工作(显然)Auth没有在这些点注册,只返回null

经过身份验证的用户获取记录并将其传递给每个视图的最佳方法是什么?

编辑:这里是相关代码

user.php的

public static function getCart()
{
    if (Auth::guest()) {
        return [];
    }

    $collection = new \Illuminate\Database\Eloquent\Collection();
    $collection = Auth::user()->cart()->pluck('post_id');

    return $collection;
}

CartServiceProvider.php

namespace App\Providers;

use View;
use App\User;
use Illuminate\Support\ServiceProvider;

class CartServiceProvider extends ServiceProvider
{
    public function boot()
    {
        View::share('cart', User::getCart());
    }

    public function register()
    {
        //
    }
}

在任何视图中......

<?php dd($cart); ?>

返回[],因为Auth尚未注册,因此返回空数组。

1 个答案:

答案 0 :(得分:2)

找到答案on Laracasts,似乎效果很好。

https://laracasts.com/discuss/channels/general-discussion/l5-service-provider-for-sharing-view-variables

来自OP @imJohnBon:&#34;我设法通过创建2个文件来解决这个问题。首先是一个ComposerServiceProvider,它使用通配符应用于每个视图,而不仅仅是特定的视图:&#34;

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\View\Factory as ViewFactory;

class ComposerServiceProvider extends ServiceProvider {

    public function boot(ViewFactory $view)
    {
        $view->composer('*', 'App\Http\ViewComposers\GlobalComposer');
    }

    public function register()
    {
        //
    }
}

&#34;然后是相应的GlobalComposer,我在其中共享应该在所有视图中可用的变量:&#34;

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Auth;

class GlobalComposer {

    public function compose(View $view)
    {
        $view->with('currentUser', Auth::user());
    }

}