因此,在发现Controller.php的构造函数中的共享视图不再有效,因为它总是将null
返回到Auth::user()
之后,我正在寻找一种不同的方法来实现它。 / p>
我只是想找到一种方法,将当前已登录用户的$user
变量传递给我的所有观看次数。
以前在5.2及以下版本中工作的方式:
public function __construct()
{
view()->share('signed_in', Auth::check());
view()->share('user', Auth::user());
}
这不再适用。我怎么分享变量?
我试过了:
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
$this->signed_in = Auth::guest();
view()->share('signed_in', $this->signed_in);
view()->share('user', $this->user);
return $next($request);
});
}
但上面的代码不起作用。它确实加载了页面而没有" Undefined Variable $ user"错误,但它只显示导航栏,然后没有别的。由于某种原因,它也会弄乱网站CSS。
我还有其他办法吗? 请帮忙。谢谢。
答案 0 :(得分:3)
我很容易解决这个问题。
在我的\App\Http\Controllers\Controller.php
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
private $user;
private $signed_in;
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->user = Auth::user();
$this->signed_in = Auth::check();
view()->share('signed_in', $this->signed_in);
view()->share('user', $this->user);
return $next($request);
});
}
}
通过将view()->share()
置于中间件的封闭中,我能够实现这一目标。
答案 1 :(得分:1)
使用中间件回调的方式是正确的方法,但你的任务是错误的。
请改用:
$this->signed_in = Auth::check();
答案 2 :(得分:0)
是的,例如,您可以创建一个新的服务提供商,并在config/app.php
中注册,并将共享逻辑放在那里。
让我们从创建新的服务提供商开始:
~/path/to/project$ php artisan make:provider ShareWithViewServiceProvider
您应该看到消息Provider created successfully.
然后,您应该修改config/app.php
,然后添加您刚创建的新服务提供商:
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\ShareWithViewServiceProvider::class, // <-- This is the new entry
然后在服务提供商的启动方法中创建逻辑:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ShareWithViewServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
view()->share([
'user' => auth()->user(),
'signedIn' => auth()->check(),
]);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
请注意,如果您未登录,auth()->user()
将返回null
。
作为一个较短的解决方案,您可以将共享逻辑放在app\Providers\AppServiceProvider.php
中,Laravel默认创建它,并且其中没有任何内容(我们可以使用它)。