Laravel 5: изменить навигацию, если пользователь зарегистрирован

Я совершенно не знаком с Laravel, MVC и шаблонами в целом.

Мне нужно показать определенные кнопки и параметры навигатора, если пользователь зарегистрировался, например: "Уведомления", "Выход из системы", "Профиль" и т.д.) и кнопку "Вход" в противном случае.

Любая помощь в том, как я мог бы решить эту проблему, очень ценится. Это то, что я сейчас рассматриваю:

  • Объект User всегда передается в представление.
  • В представлении проверяется, установлен ли User (то есть он зарегистрирован), чтобы включить соответствующий шаблон частичного клинка для навигационной панели.

app.blade.php:

...
@if (isset($user))
     @include('partials.navbarlogged')

@else
     @include('partials.navbar')
...

Это лучший метод? Спасибо за ваше время!

Ответ 1

Если вы используете Laravel 5, встроенную в модель User, вы можете просто сделать

@if (Auth::check())
  //show logged in navbar
@else
  //show logged out navbar
@endif

Ответ 2

Новые версии Laravel (5.6 на момент написания) поддерживают следующие две директивы в Blade:

@auth
// The user is authenticated...
@endauth

@guest
// The user is not authenticated...
@endguest

Смотрите официальную документацию здесь: https://laravel.com/docs/5.6/blade

Ответ 3

Для Laravel 5,7 и выше, использование @auth и @guest directives.Here является официальной документацией здесь

@auth
   // The user is authenticated...
@endauth
@guest
   // The user is not authenticated...
@endguest

Вы можете указать @auth аутентификации, которую следует проверять при использовании директив @auth и @guest:

@auth('admin')
    // The user is authenticated...
@endauth

@guest('admin')
    // The user is not authenticated...
@endguest

В противном случае вы можете использовать директиву @unless:

@unless (Auth::check())
    You are not signed in.
@endunless

Ответ 4

Вы также можете использовать Auth::guest()

Метод Auth::guest() возвращает true или false.

Пример -

@if (Auth::guest())
    <a href="{{ route('login') }}">Login</a>
    <a href="{{ route('register') }}">Register</a>
@else
    {{ Auth::user()->name }}
    <a href="{{ route('logout') }}">Logout</a>
@endif

Ответ 5

Начиная с Laravel 5.4, появилась новая директива blade- @includeWhen которая включает представление, основанное на заданном логическом условии:

@includeWhen(Auth::check(), 'partials.navbarlogged')
@includeWhen(Auth::guest(), 'partials.navbar')

Ответ 6

Это должно помочь:

@extends(Auth::check() ? 'partials.navbarlogged' : 'partials.navbar')

Auth :: chek() видит, вошел ли пользователь в систему или нет, и возвращает логическое значение.