我对Laravel,MVC和模板引擎一般都是新手。
如果用户已登录,我需要显示某些导航栏按钮和选项,例如:通知,注销,配置文件等...否则会显示“登录”按钮。
如何以正确的方式解决这个问题的任何帮助都非常感谢。这就是我现在正在考虑的事情:
User
对象始终传递给视图。User
(意味着它已登录)以包含导航栏的相应部分刀片模板。app.blade.php:
...
@if (isset($user))
@include('partials.navbarlogged')
@else
@include('partials.navbar')
...
这是最好的方法吗?谢谢你的时间!
如果您使用Laravel 5的内置用户模型,您可以这样做
@if (Auth::check())
//show logged in navbar
@else
//show logged out navbar
@endif
Laravel的新版本(撰写本文时为5.6)支持Blade中的这两个指令:
@auth
// The user is authenticated...
@endauth
@guest
// The user is not authenticated...
@endguest
请参阅此处的官方文档:https://laravel.com/docs/5.6/blade
对于laravel 5.7及以上版本,请使用@auth和@guest directives.Here是官方文档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
你也可以使用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
从Laravel 5.4开始,新的刀片指令@includeWhen
包含基于给定布尔条件的视图:
@includeWhen(Auth::check(), 'partials.navbarlogged')
@includeWhen(Auth::guest(), 'partials.navbar')
这应该有所帮助:
@extends(Auth::check() ? 'partials.navbarlogged' : 'partials.navbar')
Auth :: chek()查看用户是否登录并返回布尔值。