connexion de la gestion des événements dans laravel 5
je suis en train d'accrocher à la connexion, même dans mon L5 application pour définir dernière date de connexion et l'adresse IP. je peux le faire fonctionner avec les éléments suivants:
Event::listen('auth.login', function($event)
{
Auth::user()->last_login = new DateTime;
Auth::user()->last_login_ip = Request::getClientIp();
Auth::user()->save();
});
cependant, je me demande quelle est la meilleure façon de le faire dans L5 est avec le gestionnaire d'événement de l'objet. j'ai essayé de créer un gestionnaire d'événement et l'ajout d'auth.connectez-vous comme d'un tableau clé dans les événements, fournisseur de services, mais cela n'a pas fonctionné. im pas sûr si c'est possible ou pas avec l'auth.connexion de l'événement. si elle n'est pas, où est l'endroit le plus approprié pour mettre le code ci-dessus. pour le test, je l'ai mis dans mon routes.php fichier, mais je sais que ce n'est pas là où il devrait être.
j'ai regardé le manuel, je n'étais pas sûr de la façon de crochet à l'événement existant que laravel incendies. au-dessous de la réponse par kstev est très complet, mais im toujours pas l'endroit où ajouter le même nombre d'années. quand je traçais le contrôleur de auth et essayer de trouver où la connexion est réussie, je ne pourrais pas.....
Vous devez le faire vous-même, je pense que les événements sont déclenchés uniquement sur éloquent insert, update, delete, je ne peux pas trouver la liste complète :/ uniquement pour les L3. Voir ce tutoriel laracasts.com/lessons/laravel-5-events et discussion!
la chaîne de caractères en fonction de l'événement dans mon code ci-dessus fonctionne à l'aide de 'auth.login', mais je n'étais pas capable de l'enregistrer dans le cas de fournisseur de service, et c'est là que la confusion a commencé. j'ai essayé de faire 'auth.login' => [ UpdateUserMetaData::classe ]
J'ai enfin compris ce que vous demandez tout le temps 😉 voir ma réponse.
OriginalL'auteur Erik | 2015-03-10
Vous devez vous connecter pour publier un commentaire.
Dans laravel 5.2; auth.la connexion ne fonctionne pas... les points suivants doivent être utilisés:
Comme indiqué dans la documentation ici
Est-il travaillé pour la version 5.4
C'est la meilleure réponse!
OriginalL'auteur JuLiAnc
EDIT: cela ne fonctionne que dans la version 5.0.* et 5.1.*.
Pour la 5.2.* solution reportez-vous à JuLiAnc réponse ci-dessous.
après avoir travaillé avec les deux réponses proposées, et un peu plus de recherche, j'ai enfin compris comment le faire cette manière, j'ai essayé au début.
j'ai couru à la suite de artisan commande
Puis j'ai modifié la classe générée par la suppression de l'importation de la classe Event et le et importé le modèle de l'utilisateur. Moi aussi j'ai passé
User $user
et$remember
à la méthode handle depuis quand l'auth.connexion événement est déclenché, c'est ce qui est passé.maintenant j'ai ouvert EventServiceProvided.php et modifié le
$listen
tableau comme suit:j'ai réalisé que si cela ne fonctionne pas au premier abord, vous devrez peut-être
Il y nous allons! nous pouvons maintenant répondre à la connexion de l'utilisateur via l'auth.connexion de l'événement à l'aide d'un gestionnaire d'événement de la classe!
OriginalL'auteur Erik
Être prudent de demander quelle est la meilleure façon de faire X est, parce que Laravel, en particulier, offre de nombreuses façons d'accomplir la même tâche, certains sont meilleurs que d'autres dans certaines situations.
De prendre un coup d'oeil à la Laravel documentation, personnellement, j'irais avec le "Utilisation de Base" comme il semble correspondre au cas d'utilisation que vous avez indiqué.
Si nous exécutons Artisan de commande, nous pouvons générer un modèle pour la UserLoggedIn événement.
(notez le passé, car les événements se produisent, et puis les abonnés sont informés de l'événement ayant eu lieu)
(note 2: le
app
chaîne dans des espaces de noms est ce que Laravel utilise la sortie de la boîte, il est probablement différente pour vous si vous avez exécuté laphp artisan app:name
commande)La classe suivante est générée pour nous:
Si l'on ajoute un
userId
paramètre du constructeur, l'évènement n'a pas besoin de savoir à propos de l'Auth Façade/Garde Contrat. Cela signifie que notreUserLoggedIn
code d'événement n'est pas étroitement couplée à Éloquent ou qui jamais cadre d'authentification de vous décider à utiliser dans votre application. De toute façon, nous allons ajouter queuserId
paramètre.Maintenant vous vous demandez probablement, eh bien c'est super et tout, mais comment nous agissons sur cet événement? Excellente question! Nous avons besoin de créer un gestionnaire d'événements à gérer quand cet événement est déclenché. Faisons-le maintenant à l'aide d'Artisan:
Nous le nom de notre nouveau gestionnaire d'événement
UpdateUserMetaData
et dites Artisan qui l'événement, nous voulons traiter leUserLoggedIn
événement.Maintenant, nous avons un code qui ressemble à ceci à l'intérieur de
app/Handlers/Events/UpdateUserMetaData.php
:Nous pouvons mettre à jour la poignée de la méthode pour être en mesure de gérer cet événement comme vous l'avez indiqué ci-dessus assez facilement:
Comme une note de côté, si vous n'êtes pas familier avec De carbone, vous voudrez peut-être regarder dans l'aide de sorte que vous pouvez profiter de sa fantastique API comme vous le pouvez avec Éloquent de
created_at
etupdated_at
champs d'horodatage sur la plupart des modèles. Voici un lien pour comment dire Éloquent les champs qui doivent être utilisés avec du Carbone: http://laravel.com/docs/master/eloquent#date-mutators.Il y a deux étapes finales que nous avons à accomplir avant de ce code fonctionnera dans votre application Laravel.
Nous avons besoin de la carte de l'événement pour le gestionnaire d'événement dans le
EventServiceProvider
classe sous laapp/Providers
répertoire.Nous avons besoin de déclencher l'événement après le login.
Pour compléter la première étape, nous avons juste besoin de les ajouter à notre événement de classes à la
$listeners
propriété dansapp/Providers/EventServiceProvder.php
comme suit:Ci-dessus fonctionnera à condition que vous importez les classes à l'intérieur de la
EventServiceProvider
classe, et que vous êtes à l'aide de PHP 5.5. Si vous utilisez un bas de version de PHP, vous aurez besoin de fournir le chemin complet de chaque classe comme une chaîne de caractères comme ceci:'app/Events/UserLoggedIn'
et'app/Handlers/Events/UpdateUserMetaData'
.La
$listeners
tableau des cartes événements à leurs gestionnaires.Bon, maintenant, pour la dernière étape! Dans votre base de code, trouver l'endroit où l'utilisateur est authentifié et ajoutez les éléments suivants:
Et nous y sommes! J'ai testé ce code que j'ai écrit cette réponse, n'hésitez pas à poser des questions si vous en avez.
$ php artisan event:generate
n' pas générer à la fois gestionnaire d'événement et probablement un bug?Nah, à peu près la même, mais je envoyer Éloquent modèle à la place. Je sais que vous faites un bon point de quitter éloquent à la porte, mais son une grosse bulle merci de lire ceci: laracasts.com/forum/... c'est pourquoi je n'ai pas dissocier comme un fou. Et un point de plus, par l'envoi d'user_id au lieu de modèle, vous devez exécuter un plus requête et je suis sûr que vous l'exécutez déjà il suffit de regarder debugbar (package). J'utilise Éloquent ORM alors je l'utilise à plein temps. J'ai peut-résumé des trucs dans le dépôt mais pas tout.
Voici le bug dont je parlais, github.com/laravel/framework/issues/7264 Et de faire usage de l'artisan, ça aide beaucoup! Je veux dire, j'essaie d'utiliser tout Laravel offre. Laravel est énorme communauté, je ne comprends pas qu'il y est laracast forum, stackoverflow balises et laravel.io de nombreux sites à vérifier... je suis frustré par cette.
Pourriez-vous expliquer pourquoi vous devez utiliser un Gestionnaire d'Événement par rapport à un Auditeur? Quelle est exactement la différence?
Je pensais que le
php artisan event:generate
est la volonté de générer de la classe des événements ou des gestionnaires qui sont répertoriés dans votre EventServiceProviderOriginalL'auteur kstev
5,2 quelque chose comme cela
des Auditeurs:
Dans EventServiceProvider.php :
Merci ça marche!!! Mais, comment puis-je obtenir de l'actuel
Request
à l'intérieur dehandle
fonction?OriginalL'auteur goldie
Ouvrir EventServiceProvider.php et dans la méthode de démarrage, vous pouvez écouter
'auth.login'
événement par le biais de rappel.Vous pouvez créer auditeur de sorte que vous déplacez fonction de rappel quelque part d'autre. Faire qu'à la suite de cette http://laravel.com/docs/4.2/events#using-classes-as-listeners
HA, je l'ai trouvé. son seul référencé comme une chaîne de caractères dans la Garde de la mise en œuvre. suppose que c'est le meilleur moyen pour le moment! à moins que je vous abonner à l'événement....trop d'options..
OriginalL'auteur Kyslik
l'ai fait de cette façon
OriginalL'auteur juergen