我需要将一个集合传递给每个视图;该集合包含用户购物车中的项目的ID。我已经尝试了服务提供商和BaseClass,但两个都没有工作(显然)Auth
没有在这些点注册,只返回null
。
从经过身份验证的用户获取记录并将其传递给每个视图的最佳方法是什么?
public static function getCart()
{
if (Auth::guest()) {
return [];
}
$collection = new \Illuminate\Database\Eloquent\Collection();
$collection = Auth::user()->cart()->pluck('post_id');
return $collection;
}
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
尚未注册,因此返回空数组。
答案 0 :(得分:2)
找到答案on Laracasts,似乎效果很好。
来自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());
}
}