在 Laravel 5.2 视图中使用 Auth:User() 进行导航
Using Auth:User() in Laravel 5.2 view for nav
我有一个索引路由“/”,它加载 index.blade.php 扩展了 master。我无法在导航栏中使用 Auth::User() ,这是主导航栏的一部分。它确实适用于需要身份验证的页面。我有登录和注册按钮,这些按钮通过 /login 和 /register link AuthController,当经过身份验证的用户正在查看“/”索引页面或任何其他不需要身份验证的页面时,我希望这些按钮被注销替换.
当用户登录时,它们被重定向到正常工作的 /dashboard 路由并且导航栏正确显示,但是当他们查看主页时,登录和注册按钮在导航中并单击他们只是将他们重定向回“/”索引路由,而不显示登录或注册表单。 (因为我假设他们已经登录了。)再次获取表单的唯一方法是在地址栏中手动输入 /logout。
我试图到处查找答案,但无法弄清楚。
dd(\Auth::user())
returns 控制器中为空。
我见过很多类似的问题,但与旧版本的 Laravel 有关,但解决方案似乎不起作用,或者我只是没有正确应用它们。
感谢您的帮助!
route.php
Route::get('/','PagesController@index');
Route::group(['middleware' => ['web']], function () {
//
Route::controllers([
'register' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
});
PagesController.php
class PagesController extends Controller
{
//
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function index()
{
$nav_active = 'home';
return view('pages.index',compact('nav_active'));
app.blade.php
<ul class="nav navbar-nav navbar-right">
@if (Auth::guest())
<li><a href="{{ url('/login') }}">Login</a></li>
<li><a href="{{ url('/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
</ul>
</li>
@endif
</ul>
page/index.blade.app
@extends('layouts.app')
@section('content')
<div class="container">
...
</div>
</div>
@stop
你在 dd() 中的 Auth::user() 之前有一个反斜杠。您还可以在 app.blade.php 中将 Auth::guest() 替换为 Auth::check() 吗?
将所有内容放入 web
中间件。 web
中间件由处理会话的其他中间件组成。无会话 = 无用户。
例如,其中一个名为 Illuminate\Session\Middleware\StartSession
,它负责启动您的会话。
我不确定您为什么决定将该特定路由放在 web
组之外,但没有它,您将没有用户。如果您打算做其他事情,例如构建 API.
,您应该只将路由放在组之外
我遇到了类似的问题。在配置我的导航栏:
@if(Auth::guest())
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<i class="fa fa-user"></i> <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/login') }}">Login</a></li>
<li><a href="{{ url('/register') }}">Sign Up</a></li>
</ul>
</li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<i class="fa fa-user"></i> {{ Auth::user()->name }}
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/logout') }}">Logout</a></li>
</ul>
</li>
@endif
但是当我登录时,这个导航栏给我错误:
AliasLoader.php 第 63 行中的 FatalErrorException:
已达到“100”的最大函数嵌套级别,正在中止!
要解决此问题,请在 bootstrap/autoload.php 中输入并在文件末尾添加以下行:
ini_set('xdebug.max_nesting_level', 120);
我有一个索引路由“/”,它加载 index.blade.php 扩展了 master。我无法在导航栏中使用 Auth::User() ,这是主导航栏的一部分。它确实适用于需要身份验证的页面。我有登录和注册按钮,这些按钮通过 /login 和 /register link AuthController,当经过身份验证的用户正在查看“/”索引页面或任何其他不需要身份验证的页面时,我希望这些按钮被注销替换.
当用户登录时,它们被重定向到正常工作的 /dashboard 路由并且导航栏正确显示,但是当他们查看主页时,登录和注册按钮在导航中并单击他们只是将他们重定向回“/”索引路由,而不显示登录或注册表单。 (因为我假设他们已经登录了。)再次获取表单的唯一方法是在地址栏中手动输入 /logout。
我试图到处查找答案,但无法弄清楚。
dd(\Auth::user())
returns 控制器中为空。
我见过很多类似的问题,但与旧版本的 Laravel 有关,但解决方案似乎不起作用,或者我只是没有正确应用它们。
感谢您的帮助!
route.php
Route::get('/','PagesController@index');
Route::group(['middleware' => ['web']], function () {
//
Route::controllers([
'register' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
});
PagesController.php
class PagesController extends Controller
{
//
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function index()
{
$nav_active = 'home';
return view('pages.index',compact('nav_active'));
app.blade.php
<ul class="nav navbar-nav navbar-right">
@if (Auth::guest())
<li><a href="{{ url('/login') }}">Login</a></li>
<li><a href="{{ url('/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
</ul>
</li>
@endif
</ul>
page/index.blade.app
@extends('layouts.app')
@section('content')
<div class="container">
...
</div>
</div>
@stop
你在 dd() 中的 Auth::user() 之前有一个反斜杠。您还可以在 app.blade.php 中将 Auth::guest() 替换为 Auth::check() 吗?
将所有内容放入 web
中间件。 web
中间件由处理会话的其他中间件组成。无会话 = 无用户。
例如,其中一个名为 Illuminate\Session\Middleware\StartSession
,它负责启动您的会话。
我不确定您为什么决定将该特定路由放在 web
组之外,但没有它,您将没有用户。如果您打算做其他事情,例如构建 API.
我遇到了类似的问题。在配置我的导航栏:
@if(Auth::guest())
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<i class="fa fa-user"></i> <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/login') }}">Login</a></li>
<li><a href="{{ url('/register') }}">Sign Up</a></li>
</ul>
</li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<i class="fa fa-user"></i> {{ Auth::user()->name }}
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/logout') }}">Logout</a></li>
</ul>
</li>
@endif
但是当我登录时,这个导航栏给我错误:
AliasLoader.php 第 63 行中的 FatalErrorException: 已达到“100”的最大函数嵌套级别,正在中止!
要解决此问题,请在 bootstrap/autoload.php 中输入并在文件末尾添加以下行:
ini_set('xdebug.max_nesting_level', 120);