Laravel 5.7 - Доступ к Auth :: User () внутри поставщика услуг - PullRequest
0 голосов
/ 06 ноября 2018

Мне нужен доступ к текущему пользователю в сервис-провайдере модуля. Auth::user() возвращает ноль. Я знаю, что промежуточное программное обеспечение вызывается после поставщика услуг, и поэтому оно является нулевым. Есть ли решение этой проблемы? это мой код

namespace Modules\User\Providers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\ServiceProvider;
use Nwidart\Modules\Facades\Module;

class ViewComposerProvider extends ServiceProvider
{
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */

    protected $defer = false;

    /**
     * Register the service provider.
     *
     * @return void
     */

    public function boot()
    {
        $this->buildMenu();
        $this->buildAvatar();
    }

    public function register()
    {
        dd(Auth::user());//null
    }

    private function buildAvatar(){
        $f = Auth::user();
        dd($f); // null
    }

    public function buildMenu()
    {
        view()->composer('layouts.subnavbar', function ($view) {
            $t = \Nwidart\Modules\Facades\Module::getByStatus(1);
            $modules = [];
            foreach ($t as $item)
                $modules[] = $item->name;
            $view->with('modules', $modules);
        });
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return [];
    }
}

1 Ответ

0 голосов
/ 06 ноября 2018

Вместо вызова пользователя в провайдере вы можете сделать 2 просмотра композиторов, 1 для меню и 1 для аватара

AvatarComposer.php

class AvatarComposer
{

    public function compose(View $view)
    {
        $avatar = Auth::user()->avatar//AVATAR HERE
        $view->with('avatar', $avatar);
    }
}

ModuleComposer.php

class ModuleComposer
{
    public function compose(View $view)
    {
        $t = \Nwidart\Modules\Facades\Module::getByStatus(1);
        $modules = [];
        foreach ($t as $item)
            $modules[] = $item->name;
        $view->with('modules', $modules);
    }
}

, а затем в boot вашего провайдера:

//make it public for all routes
View::composer('*', AvatarComposer::class);

View::composer('layouts.subnavbar', ModuleComposer::class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...