在 AppServiceProvider 中访问用户?
Access user in AppServiceProvider?
我需要能够在用户登录时将数据传递给所有视图。
这是我的 AppServiceProvider
目前的样子:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
但是,数据永远不会传递给视图,因为我不能在 AppServiceProvider
中使用 Auth
(出于某种原因),所以永远不会满足 if 语句条件。
我发现 之后,我尝试这样做:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
}
这行得通,但问题是每当呈现视图时都会调用闭包。
例如,如果我的 blade 模板包含 3 个其他 blade 模板(确实如此),那么上面的闭包将被调用 4 次。 Explained further here.
那么如何在AppServiceProvider
中正确访问用户呢?
Auth
方法在 AppSeviceProvider
的直接上下文中不起作用的原因是 Auth 系统尚未加载。在定义的闭包中,Auth 系统将可用,因为它总是在执行此闭包之前加载。因此,问题出在视图编辑器的使用方式上。
composer
方法仅接受视图标识符数组(或字符串)和 *
。因此,以下选项可用:
定义多个视图
View::composer(['about', 'contact'], function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
定义一个视图,并使其成为所有相关页面的主要父视图
例如,您可以定义一个 main.blade.php
并使用所有相关视图扩展此视图。
@extends('main')
并分享 main
视图:
View::composer('main', function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
还有其他可用选项,例如过滤器或父控制器。很好的回答 .
我需要能够在用户登录时将数据传递给所有视图。
这是我的 AppServiceProvider
目前的样子:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
但是,数据永远不会传递给视图,因为我不能在 AppServiceProvider
中使用 Auth
(出于某种原因),所以永远不会满足 if 语句条件。
我发现
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
}
}
这行得通,但问题是每当呈现视图时都会调用闭包。
例如,如果我的 blade 模板包含 3 个其他 blade 模板(确实如此),那么上面的闭包将被调用 4 次。 Explained further here.
那么如何在AppServiceProvider
中正确访问用户呢?
Auth
方法在 AppSeviceProvider
的直接上下文中不起作用的原因是 Auth 系统尚未加载。在定义的闭包中,Auth 系统将可用,因为它总是在执行此闭包之前加载。因此,问题出在视图编辑器的使用方式上。
composer
方法仅接受视图标识符数组(或字符串)和 *
。因此,以下选项可用:
定义多个视图
View::composer(['about', 'contact'], function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
定义一个视图,并使其成为所有相关页面的主要父视图
例如,您可以定义一个 main.blade.php
并使用所有相关视图扩展此视图。
@extends('main')
并分享 main
视图:
View::composer('main', function ($view)
{
if (Auth::check())
{
View::share('key', 'value');
}
}
还有其他可用选项,例如过滤器或父控制器。很好的回答