Authentication Laravel 5:如何添加Auth::user()->;通过构造函数的id?

Authentication Laravel 5:如何添加Auth::user()->;通过构造函数的id?,authentication,laravel,constructor,Authentication,Laravel,Constructor,我可以通过以下方式获取经过身份验证的用户的ID: Auth::user()->id = $id; 太好了,它工作了。。。但是我有一大堆需要它的方法,我想要一种更干净的方法将它作为一个整体添加到类中,这样我就可以在每个方法中引用$id了。我本来想把它放到构造函数中,但是由于Auth::user是静态的,所以我把事情弄得一团糟,不知道怎么做 非常感谢你的帮助 您可以在整个应用程序中使用Auth::user()。不管你在哪里。但是,为了回答您的问题,您可以使用controllers文件夹中的“

我可以通过以下方式获取经过身份验证的用户的ID:

Auth::user()->id = $id;
太好了,它工作了。。。但是我有一大堆需要它的方法,我想要一种更干净的方法将它作为一个整体添加到类中,这样我就可以在每个方法中引用$id了。我本来想把它放到构造函数中,但是由于Auth::user是静态的,所以我把事情弄得一团糟,不知道怎么做

非常感谢你的帮助

您可以在整个应用程序中使用Auth::user()。不管你在哪里。但是,为了回答您的问题,您可以使用controllers文件夹中的“Controller”类。在那里添加构造函数并引用用户ID

<?php namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesCommands;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;

/* Don't forget to add the reference to Auth */
use Auth;

abstract class Controller extends BaseController {

    use DispatchesCommands, ValidatesRequests;

    function __construct() {
        $this->userID = Auth::user()?Auth::user()->id:null;
    }
}

您可以为身份验证类注入契约,然后在控制器上设置用户ID,而不是使用Facade。就像@rotvulpix展示的那样,您可以将其放在基本控制器上,以便所有子控制器也可以访问用户ID

<?php

namespace App\Http\Controllers;

use Illuminate\Contracts\Auth\Guard;

class FooController extends Controller
{
    /**
     * The authenticated user ID.
     *
     * @var int
     */
    protected $userId;

    /**
     * Construct the controller.
     *
     * @param  \Illuminate\Contracts\Auth\Guard  $auth
     * @return void
     */
    public function __construct(Guard $auth)
    {
        $this->userId = $auth->id();
    }
}

Laravel>=5.3

您无法访问控制器构造函数中的会话或已验证用户,因为中间件尚未运行

或者,您可以直接在控制器的构造函数中定义基于闭包的中间件。使用此功能之前,请确保您的应用程序正在运行Laravel
5.3.4
或更高版本:

class UserController extends Controller {

    protected $userId;

    public function __construct() {

        $this->middleware(function (Request $request, $next) {
            if (!\Auth::check()) {
                return redirect('/login');
            }
            $this->userId = \Auth::id(); // you can access user id here
     
            return $next($request);
        });
    }
}

是的,在这里阅读Laravel 5.3的升级文档:这里提到了这个问题,会话在构造函数中不再可用。