Как поделиться аутентифицированным пользователем во всех laravel представлениях - PullRequest
0 голосов
/ 10 января 2020

У меня очень странная проблема в Laravel 5.8 . Я хочу поделиться пользовательской переменной со всеми представлениями.

Я добавил это к своему методу boot в AppServiceProvider.php:

Event::listen(Authenticated::class, function ($e) {
    view()->share('user', $e->user);
});

В представлении у меня есть это:

@auth('web')
  {{$user->name}}
@endauth

Модель User имеет

protected $guard = 'web';

Она работает большую часть времени, но иногда я получаю эту ошибку:

Uncaught ErrorException: Undefined variable: user in /home/forge/www.mywebsite.com/storage/framework/views/4b273b493839e5fb54c3f6a2d11d9446bee5de33.php:11

Как это возможно?

Ответы [ 4 ]

1 голос
/ 10 января 2020

Рассмотрите возможность использования составителей представлений для общих переменных вокруг представлений

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Contracts\Auth\Guard; 
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(Guard $auth)
    {

        // Using Closure based composers...
        View::composer('*', function ($view) use ($auth) {
            $view->with('currentAuthenticatedUser', $auth->user());
        });
    }
}

Документы

1 голос
/ 10 января 2020

Просто используйте глобальный метод auth() в своем блейде для получения аутентифицированной информации о пользователе.

@auth {{ auth()->user->id }} @endauth

или

@auth {{ auth()->user->name }} @endauth

или

@auth {{ auth()->user->email }} @endauth

При необходимости вы можете указать, к какому экземпляру сторожа вы хотите получить доступ:

$user = auth('web')->user();

Обновлено

Иногда вам может потребоваться предоставить доступ к фрагменту данных для всех представлений, которые отображаются вашим приложением, перейдите по следующей ссылке

Обмен данными со всеми представлениями

1 голос
/ 10 января 2020

Вы можете получить доступ к аутентифицированному пользователю через помощника авторизации в ваших представлениях.

$user = auth()->user();

https://laravel.com/docs/5.8/helpers#method -auth

ОБНОВЛЕНИЕ : Чтобы не повторять это в каждом представлении, вы можете выбрать пользователя из auth фасад / помощник в ваших файлах макета, таким образом, переменная будет доступна во всех представлениях, расширяющих этот макет

0 голосов
/ 10 января 2020

Все это отличные ответы. Вы также можете использовать Auth фасад для выполнения sh этого.

use Illuminate\Support\Facades\Auth;

$user = Auth::user()->name;

https://laravel.com/docs/5.8/authentication

...