laravel - 访问AppServiceProvider中的用户?

标签 laravel laravel-5 laravel-5.3

我需要能够在用户登录时将数据传递到所有 View 。

这是我的 AppServiceProvider 目前的样子:

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        if (Auth::check())
        {
            View::share('key', 'value');
        }
    }
}

但是,数据永远不会传递到 View ,因为我无法在 AppServiceProvider 中使用 Auth (出于某种原因),因此永远不会满足 if 语句条件。

关注 previous solution我发现,我尝试这样做:

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        View::composer('*', function ($view)
        {
            if (Auth::check())
            {
                View::share('key', 'value');
            }
        }
    }
}

这有效,但问题是每当渲染 View 时都会调用闭包。

例如,如果我的 Blade 模板包含 3 个其他 Blade 模板(确实如此),那么上面的闭包将被调用 4 次。 Explained further here .

那么如何在AppServiceProvider中正确访问用户呢?

最佳答案

Auth 方法无法在 AppSeviceProvider 的直接上下文中工作的原因是 Auth 系统尚未加载。在定义的闭包中,Auth 系统将可用,因为它始终在执行此闭包之前加载。因此,问题在于 View 编辑器的使用方式。

composer 方法仅接受 View 标识符数组(或字符串)和 *。因此,可以使用以下选项:

定义多个 View

View::composer(['about', 'contact'], function ($view)
{
    if (Auth::check())
    {
        View::share('key', 'value');
    }
}

定义一个 View ,并将其作为所有相关页面的主要父 View

例如,您可以定义一个 main.blade.php 并使用所有相关 View 扩展此 View 。

@extends('main')

并且只需共享 View :

View::composer('main', function ($view)
{
    if (Auth::check())
    {
        View::share('key', 'value');
    }
}

还有其他可用选项,例如过滤器或父 Controller 。优秀答案here .

关于laravel - 访问AppServiceProvider中的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43899890/

相关文章:

php - 在 Laravel 4.1 中使用 Eloquent ORM 在同一个表中查询关系

php - 无法与主机 smtp.gmail.com 建立连接网络无法访问 Laravel 电子邮件中的 #101 错误

php - Laravel 5.1 无法识别 postgres 中的时间戳字段

javascript - Laravel 5.5 Axios POST 导致 419 错误

php - Laravel SQLSTATE[42000] : Syntax error or access violation: 1055

laravel - 符号链接(symbolic link)通过部署脚本在 Laravel Envoyer 中上传文件夹

php - Laravel 获取记录所在的月份和年份

javascript - Vue.js 2- sweet alert package simplert 不工作

laravel - 当 TTR 耗尽时,QueueWorker 会发生什么?

php - 在表单编辑中访问旧的 ("value")