laravel - 如何从 session 数据创建 Laravel 全局变量并使其在所有 View 中可用?

标签 laravel laravel-events laravel-session

我在 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 数据似乎无法访问。

最佳答案

您正在寻找的是 View Composer :

https://laravel.com/docs/5.8/views#view-composers

如果您的 session 数据在服务提供商的启动过程中不可用(事实并非如此),您应该使用中间件并以这种方式定义它:

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 = [...] 上)。

关于laravel - 如何从 session 数据创建 Laravel 全局变量并使其在所有 View 中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55168227/

相关文章:

php - Laravel 中 View::make 的返回类型是什么?

php - 如何在通过 Laravel Eloquent 方法连接的元素上使用 orderby

php - 如何在 Laravel 5.2 中监听事件?

PhpUnit 和 Laravel 5.4 如何在测试期间模拟 session 数据

laravel - FilesystemManager.php 第 121 行中的 InvalidArgumentException : Driver [] is not supported

php - 如何在 Laravel 5 中使用 Bootstrap?

laravel - 如何在 Laravel 单元测试中停止事件伪造(切换事件伪造)

Laravel 检查 updateOrCreate 是否执行了更新

laravel - 在 session Laravel 中存储用户角色

php - Laravel - 停止并发访问记录