3
votes

Comment obtenir l'ID utilisateur actuel dans le constructeur de laravel?

J'utilise laravel 5.7, mais je ne peux pas obtenir l'ID utilisateur actuel dans __construct ().

J'ai aussi essayé Auth: id (), mais cela ne fonctionne pas non plus.

Comment obtenir l'ID utilisateur actuel dans le constructeur?

use Illuminate\Support\Facades\Auth;

class TestController extends Controller
{

    public $id;

    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware(function ($request, $next) {
            $this->id = Auth::user()->id;
            return $next($request);
        });
        dd($this->id);
    }
}

La sortie actuelle est nulle.


5 commentaires

Dans les versions précédentes de Laravel, vous pouviez accéder aux variables de session ou à l'utilisateur authentifié dans le constructeur de votre contrôleur. Cela n'a jamais été destiné à être une caractéristique explicite du cadre. Dans Laravel 5.3, vous ne pouvez pas accéder à la session ou à l'utilisateur authentifié dans le constructeur de votre contrôleur car le middleware n'est pas encore exécuté. Plus d'informations: stackoverflow.com/questions/39175252 /…


vous ne pouvez pas faire cela, essayez avec l'exemple dans "Session In The Constructor" -> laravel.com/docs/5.3/upgrade#upgrade-5.3.0


La première solution est la même que ci-dessus et elle ne fonctionne pas. Pour la deuxième solution, je veux de la valeur uniquement dans le constructeur.


Je vois cela, veuillez vérifier mon code, c'est le même que le code de la solution utilisez Illuminate \ Support \ Facades \ Auth; utilisez Illuminate \ Http \ Request; class HomeController étend le contrôleur {projets $ protégés; public function __construct () {$ this-> middleware (function ($ request, $ next) {$ this-> projects = Auth :: user (); return $ next ($ request);}); dd ($ this-> projets); }} Mais ça ne marche pas.


malheureusement, vous ne pouvez pas voir les données sur __construct, si vous faites dd ($ this-> projects); dans une autre méthode, vous verrez le contenu.


3 Réponses :


4
votes

Vous ne pouvez accéder à la session qu'à la clôture. Refactorisez simplement votre code comme suit:

public function __construct()
{
    $this->middleware('auth');
    $this->middleware(function ($request, $next) {
        $this->id = Auth::user()->id;
        dd($this->id);

        return $next($request);
    });
}

Vous pouvez maintenant utiliser la valeur $ this-> id dans vos méthodes de contrôleur.

Dans le exemple dans votre question, après avoir défini la valeur $ this-> id , vous continuez avec la demande. Puisque vous essayez d'accéder à $ this-> id en dehors de la portée de la fermeture, il est toujours null dans le datadump.


0 commentaires

0
votes

La solution la plus simple est de créer un middleware et de l'appeler plus tard dans le constructeur.

public function __construct()
{
    $this->middleware('auth');
    $this->middleware('foobar');
}

Je recommande de mettre un alias dans Kernel.php

protected $routeMiddleware = [
...
'foobar' => \App\Http\Middleware\FoobarMiddleware::class, 
]


0 commentaires

3
votes

Après le retour, vous ne passerez pas à la déclaration suivante, c'est pourquoi il n'est pas imprimé.

Si vous souhaitez utiliser cela en vue, vous n'avez pas besoin de passer en vue, vous pouvez simplement accéder à l'utilisateur connecté id comme celui-ci

use Illuminate\Support\Facades\Auth;

class TestController extends Controller
{

    public $id;

    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware(function ($request, $next) {
        $this->id = Auth::user()->id;
         dd($this->id);
        return $next($request);
       });

    }
  }

si vous souhaitez l'utiliser dans le contrôleur, assurez-vous que vous êtes connecté.

Parfois, la session a expiré, vous ne le serez pas obtenir l'ID utilisateur

{{Auth->user->id}}


0 commentaires