在我的BaseController中我有这个:
public function __construct()
{
$user = Auth::user();
View::share('user', $user);
}
我可以在所有视图中访问$ user数组,但是如果我希望它成为我所有控制器中可用的全局变量呢?
我有以下工作代码:
use Auth;
use DB;
class UsersController extends BaseController
{
public function index()
{
$user = Auth::user();
$users = DB::table('users')->where('user_id', $user->user_id)->get();
return view('pages.users.index', compact('users');
}
}
我希望我的所有控制器和控制器上的每个控制器内的所有公共功能都可以使用$ user变量,但我不想重新声明"使用Auth;"和" $ user = Auth :: user();"
我尝试将它添加到BaseController中的__construct但是看起来没有用,Undefined $ user variable error。有什么想法吗?我知道这是可能的。
答案 0 :(得分:3)
我不明白为什么这样的事情不起作用:
public function __construct()
{
$this->user = \Auth::user();
\View::share('user', $this->user);
}
通过这种方式,您可以使用所有视图,只要您的控制器正在扩展BaseController
,它就可以在所有控制器中使用$this->user
。
答案 1 :(得分:3)
在其他答案中显示,您可以:
\Auth::user()
另一种技术,你可以使用auth()
helper:
auth()->user()
甚至是documented。
根据{{3}},没有计划在Laravel中添加user()
助手。
如果您认为值得将此助手添加到项目中,请输入以下代码:
function user()
{
// short and sweet
return auth()->user();
// alternative, saves one function call!!
return app('Illuminate\Contracts\Auth\Guard')->user();
}
答案 2 :(得分:1)
我没有看到使用Auth::user()
的问题,这个类使用的是单例模式,这意味着如果Auth::user()
已经初始化,则不会再次检查数据库尤其是当大多数代码甚至不在控制器内时,所以基本上你仍然需要在服务,模型,表单请求等中进行Auth::user()
。
abstract class Controller extends BaseController {
protected $user;
use ValidatesRequests;
public function ___construct(){
$this->user = \Auth::user();
}
}
答案 3 :(得分:1)
为什么不使用帮助函数。它不会为您提供$ user变量,但它可以为您提供更简洁的方法来实现此目的。
在 helpers.php 中添加一个功能:
function getUser(){
return Auth::user();
}
在所有其他地方(控制器,视图,模型)中,请致电:getUser()
。就是这样。
如果您还没有任何帮助文件。您可以按照此link创建一个。