web-dev-qa-db-ja.com

Laravel 5:ユーザーがログインしている場合はnavbarを変更

私は、Laravel、MVC、およびテンプレートエンジン全般についてはまったく初めてです。

ユーザーがログインしている場合、通知、ログアウト、プロファイルなどの特定のnavbarボタンとオプションを表示する必要があります。それ以外の場合は、ログインボタンを表示する必要があります。

正しい方法でこれに対処する方法についてのヘルプは大歓迎です。これは私が現時点で検討しているものです:

  • Userオブジェクトは常にビューに渡されます。
  • ビューは、Userが設定されている(ログインしていることを意味する)かどうかをチェックし、navbarに適切な部分的なブレードテンプレートを含めます。

app.blade.php:

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

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

これが最良の方法ですか?御時間ありがとうございます!

28
bockzior

Laravel 5の組み込みのユーザーモデルを使用している場合は、単純に

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

Laravel(執筆時点で5.6))の新しいバージョンは、Bladeで次の2つのディレクティブをサポートしています。

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

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

こちらの公式ドキュメントを参照してください: https://laravel.com/docs/5.6/blade

22

laravel 5.7以降では、@ authおよび@guestディレクティブを使用します。公式ドキュメントはこちらです here

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

@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
20
brianokinyi

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
6
Rohan Khude

Laravel 5.4から始まり、新しいブレードディレクティブ@includeWhenこれには、指定されたブール条件に基づいたビューが含まれます。

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

これは役立つはずです:

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

Auth :: chek()は、ユーザーがログインしているかどうかを確認し、ブール値を返します。

1
bohemianjock