Laravel 5: Change navbar if user is logged

2020-05-22 15:22发布

问题:

I'm completely new to Laravel, MVC and templating engines in general.

I need to show certain navbar buttons and options if a user is logged in such as: Notifications, Logout, Profile, etc... and a Login button otherwise.

Any help on how I could address this the right way is greatly appreciated. This is what I'm considering at the moment:

  • A User object is always passed to the view.
  • The view checks if the User is set (meaning it's logged in) to include the appropriate partial blade template for the navbar.

app.blade.php:

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

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

Is this the best method? Thanks for your time!

回答1:

If you are using Laravel 5's built in User model you can simply do

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


回答2:

For laravel 5.7 and above, use @auth and @guest directives.Here is the official documentation here

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

You may specify the authentication guard that should be checked when using the @auth and @guest directives:

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

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

Otherwise, you can use the @unless directive:

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


回答3:

New versions of Laravel (5.6 at time of writing) support these two directives in Blade:

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

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

See official documentation here: https://laravel.com/docs/5.6/blade



回答4:

You can also use Auth::guest()

The Auth::guest() method returns true or false.

Example -

@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:

Starting from Laravel 5.4 there's new blade directive @includeWhen which includes view based on a given boolean condition :

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


回答6:

This should help :

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

The Auth::chek() sees whether the user is logged in or not and returns a boolean.