如何从 session 数据创建 Laravel 全局变量并使其在所有视图中可用?
How do I create a Laravel global variable from session data and make available across all views?
我在 LoginController 中设置 session 登录数据,如下所示:
class LoginController extends Controller{
protected function authenticated($request, $user){
$record = ['name'=>'bob'];
session(['profile' => $record]);
}
}
session 可用于任何 blade:
$profile = session('profile');
如何让变量 $profile
在所有 blade 上可用?
我已经尝试使用事件侦听器和 View::share( 'profile', session('profile'))
,但是 session 数据在我使用的事件中似乎还无法访问。
正确的做法是使用这句话session()->get('profile'),例如在视图中{{ session()->get('profile') } }.
您正在寻找的是视图作曲家:
https://laravel.com/docs/5.8/views#view-composers
如果您的会话数据在服务提供商的启动过程中不可用(实际上不是),您应该使用中间件并以这种方式定义它:
https://laravel.com/docs/5.8/middleware#registering-middleware
// App\Http\Middleware\MyMiddleware.php
class MyMiddleware
{
public function handle($request, Closure $next, $guard = null)
{
$profile = session('profile');
View::share('profile', $profile);
// Important: return using this closure,
// since this is all part of a chain of middleware executions.
return $next($request);
}
}
接下来确保您的中间件已加载到 App\Http\Kernel.php
中(例如在全局中间件堆栈 protected $middleware = [...]
.
中
我在 LoginController 中设置 session 登录数据,如下所示:
class LoginController extends Controller{
protected function authenticated($request, $user){
$record = ['name'=>'bob'];
session(['profile' => $record]);
}
}
session 可用于任何 blade:
$profile = session('profile');
如何让变量 $profile
在所有 blade 上可用?
我已经尝试使用事件侦听器和 View::share( 'profile', session('profile'))
,但是 session 数据在我使用的事件中似乎还无法访问。
正确的做法是使用这句话session()->get('profile'),例如在视图中{{ session()->get('profile') } }.
您正在寻找的是视图作曲家:
https://laravel.com/docs/5.8/views#view-composers
如果您的会话数据在服务提供商的启动过程中不可用(实际上不是),您应该使用中间件并以这种方式定义它:
https://laravel.com/docs/5.8/middleware#registering-middleware
// App\Http\Middleware\MyMiddleware.php
class MyMiddleware
{
public function handle($request, Closure $next, $guard = null)
{
$profile = session('profile');
View::share('profile', $profile);
// Important: return using this closure,
// since this is all part of a chain of middleware executions.
return $next($request);
}
}
接下来确保您的中间件已加载到 App\Http\Kernel.php
中(例如在全局中间件堆栈 protected $middleware = [...]
.