Laravel 5.5 服务提供商模板中的全局变量
Laravel 5.5 global variable in template from service provider
如何在服务提供商中获取有关已登录用户的信息?当我在我的模板 {{ $test }} 中使用它时总是 return 0 但我 100% 确定我已登录。或者我有更好的解决方案?
use Illuminate\Support\ServiceProvider;
use Auth;
use View;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
$user = Auth::user();
if ($user !== null) {
$walletsCount = $user->wallets()->count();
} else {
$walletsCount = 0;
}
View::share('test', $walletsCount);
}
}
默认情况下,您无法在请求生命周期的早期访问会话。 web
组中间件有一个 StartSession
中间件负责实际启动和加载会话。 Auth
系统默认,web
守卫,使用会话来存储用户。所以您还没有访问会话的权限,因此用户将 return 视为 null
。该请求甚至还没有到达那堆中间件。
您可以添加一个中间件来执行此操作。将中间件添加到 web
堆栈的末尾。当此中间件获得 运行 时,堆栈中的前一个中间件已经加载了会话,因此您可以在那里访问经过身份验证的用户。
如果这类似于布局,您需要此变量,因为您可以改用视图编辑器。有一些选项完全取决于您的需要。
发生这种情况是因为 Laravel 正在加载服务提供商时身份验证功能尚未初始化。一种处理方法是将逻辑移到视图中:
{{ auth()->check() ? auth()->user()->wallets()->count() : 0 }}
另一种方法是使用带闭包的视图编辑器:
public function boot()
{
view()->composer('*', function($view) {
$view->with('walletsCount', auth()->check() ? auth()->user()->wallets()->count() : 0);
});
}
如何在服务提供商中获取有关已登录用户的信息?当我在我的模板 {{ $test }} 中使用它时总是 return 0 但我 100% 确定我已登录。或者我有更好的解决方案?
use Illuminate\Support\ServiceProvider;
use Auth;
use View;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
$user = Auth::user();
if ($user !== null) {
$walletsCount = $user->wallets()->count();
} else {
$walletsCount = 0;
}
View::share('test', $walletsCount);
}
}
默认情况下,您无法在请求生命周期的早期访问会话。 web
组中间件有一个 StartSession
中间件负责实际启动和加载会话。 Auth
系统默认,web
守卫,使用会话来存储用户。所以您还没有访问会话的权限,因此用户将 return 视为 null
。该请求甚至还没有到达那堆中间件。
您可以添加一个中间件来执行此操作。将中间件添加到 web
堆栈的末尾。当此中间件获得 运行 时,堆栈中的前一个中间件已经加载了会话,因此您可以在那里访问经过身份验证的用户。
如果这类似于布局,您需要此变量,因为您可以改用视图编辑器。有一些选项完全取决于您的需要。
发生这种情况是因为 Laravel 正在加载服务提供商时身份验证功能尚未初始化。一种处理方法是将逻辑移到视图中:
{{ auth()->check() ? auth()->user()->wallets()->count() : 0 }}
另一种方法是使用带闭包的视图编辑器:
public function boot()
{
view()->composer('*', function($view) {
$view->with('walletsCount', auth()->check() ? auth()->user()->wallets()->count() : 0);
});
}