我有一个索引路径“/”,它加载了扩展master的index.blade.php。我无法在导航栏中使用Auth :: User(),导航栏是主要部分包含的。它适用于需要身份验证的页面。我有登录和注册按钮,通过/ login和/ register链接AuthController,并且当经过身份验证的用户正在查看“/”索引页面或不需要身份验证的任何其他页面时,希望这些按钮被Logout替换。
当用户登录时,会重定向正确运行的/仪表板路径并且导航栏显示正确,但当他们查看主页时,登录和注册按钮在导航中并单击它们只是将它们重定向回“/”索引路由,而不显示登录或注册表单。 (因为他们已经登录了我假设。)再次获取表单的唯一方法是在地址栏中手动输入/注销。
我一直在尝试查找各地的答案,但无法弄明白。
Route::get('/','PagesController@index');
Route::group(['middleware' => ['web']], function () {
//
Route::controllers([
'register' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
});
在控制器中返回null。
我已经看到了很多类似的问题,但是与旧版本的Laravel有关,但解决方案似乎没有用,或者我只是没有正确应用它们。
感谢您的帮助!
route.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'));
PagesController.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>
app.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
...
</div>
</div>
@stop
页/ index.blade.app
{{1}}
答案 0 :(得分:1)
将所有内容放在web
中间件中。 web
中间件由处理会话的其他中间件组成。没有会话=没有用户。
例如,其中一个名为Illuminate\Session\Middleware\StartSession
,负责启动会话。
我不确定您为什么决定将该特定路线放在web
组之外,但如果没有它,您将无法拥有用户。如果您打算做其他事情,例如构建API,则应该只将路由放在组外。
答案 1 :(得分:0)
你的dd()中的Auth :: user()之前有一个反斜杠。您也可以在app.blade.php中用Auth :: check()替换Auth :: guest()吗?
答案 2 :(得分:0)
我有类似的问题。在配置我的导航栏中:
@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);