无法通过 view()->share 在 App\Http\Controllers\Controller 中分享 Auth::check()
Cant share Auth::check() in App\Http\Controllers\Controller via view()->share
我想在每个视图中共享 Auth::check() 结果 作为 $signedIn 变量,我发现我可以通过 Laravel 中的父控制器执行此操作。它工作得很好,但它不想为 Auth::check() 工作 - 它 returns 什么都没有。
父控制器的代码
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Auth;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function __construct()
{
view()->share('signedIn', Auth::check());
}
}
视图代码,其中我使用了前面提到的 $signedIn 变量
@if($signedIn)
@include('question.answer-form')
@else
<div class="alert alert-warning">
<p>
<a href="{{ url('login') }}">Sign in</a> in order to answer a question
</p>
</div>
@endif
在我重定向到视图的控制器的构造函数中,我调用了父构造函数 - 问题是它不想为 Auth::check( )。
Laravel 5.3v。
将 Auth::check()
结果传递给视图没有任何意义,因为默认情况下 Auth
在所有视图中都可用,auth()
全局助手也是如此。因此,只需在任何 Blade 视图中使用其中一项检查即可。他们都做同样的事情:
@if (Auth::check())
@if (auth()->check())
@if (Auth::user())
@if (auth()->user())
您应该在 service 提供商的 boot 方法
中调用共享
来源:https://laravel.com/docs/5.3/views#sharing-data-with-all-views
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Auth;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('signedIn', Auth::check());
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
您无法在控制器的构造函数中访问会话或经过身份验证的用户,因为中间件还没有 运行。
试试看:
public function __construct()
{
$this->middleware(function ($request, $next) {
view()->share('signedIn', Auth::check());
return $next($request);
});
}
我想在每个视图中共享 Auth::check() 结果 作为 $signedIn 变量,我发现我可以通过 Laravel 中的父控制器执行此操作。它工作得很好,但它不想为 Auth::check() 工作 - 它 returns 什么都没有。
父控制器的代码
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Auth;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function __construct()
{
view()->share('signedIn', Auth::check());
}
}
视图代码,其中我使用了前面提到的 $signedIn 变量
@if($signedIn)
@include('question.answer-form')
@else
<div class="alert alert-warning">
<p>
<a href="{{ url('login') }}">Sign in</a> in order to answer a question
</p>
</div>
@endif
在我重定向到视图的控制器的构造函数中,我调用了父构造函数 - 问题是它不想为 Auth::check( )。
Laravel 5.3v。
将 Auth::check()
结果传递给视图没有任何意义,因为默认情况下 Auth
在所有视图中都可用,auth()
全局助手也是如此。因此,只需在任何 Blade 视图中使用其中一项检查即可。他们都做同样的事情:
@if (Auth::check())
@if (auth()->check())
@if (Auth::user())
@if (auth()->user())
您应该在 service 提供商的 boot 方法
中调用共享来源:https://laravel.com/docs/5.3/views#sharing-data-with-all-views
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\Auth;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('signedIn', Auth::check());
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
您无法在控制器的构造函数中访问会话或经过身份验证的用户,因为中间件还没有 运行。
试试看:
public function __construct()
{
$this->middleware(function ($request, $next) {
view()->share('signedIn', Auth::check());
return $next($request);
});
}