Je veux qu'un écouteur d'événement soit lié à un événement du modèle. updating
.
Par exemple, après la mise à jour d'un article, il y a une alerte notifiant le titre de l'article mis à jour, comment écrire un écouteur d'événement pour avoir la notification (avec la valeur du titre de l'article passant à l'écouteur) ?
Réponses
Trop de publicités?Cet article : http://driesvints.com/blog/using-laravel-4-model-events/
Montre comment mettre en place des récepteurs d'événements à l'aide de la fonction statique "boot()" à l'intérieur du modèle :
class Post extends eloquent {
public static function boot()
{
parent::boot();
static::creating(function($post)
{
$post->created_by = Auth::user()->id;
$post->updated_by = Auth::user()->id;
});
static::updating(function($post)
{
$post->updated_by = Auth::user()->id;
});
}
}
La liste d'événements que @phill-sparks a partagée dans sa réponse peut être appliquée à des modules individuels.
La documentation mentionne brièvement Modèles d'événements . Ils ont tous une fonction d'aide sur le modèle, de sorte que vous n'avez pas besoin de savoir comment ils sont construits.
Les modèles Eloquent déclenchent plusieurs événements, ce qui vous permet de vous connecter à différents points du cycle de vie du modèle en utilisant les méthodes suivantes : création, created, updating, updated, saving, saved, deleting, deleted. Si l'événement de création, de mise à jour, d'enregistrement ou de suppression renvoie la valeur false, l'action est annulée.
Project::creating(function($project) { }); // *
Project::created(function($project) { });
Project::updating(function($project) { }); // *
Project::updated(function($project) { });
Project::saving(function($project) { }); // *
Project::saved(function($project) { });
Project::deleting(function($project) { }); // *
Project::deleted(function($project) { });
Si vous retournez false
à partir des fonctions marquées *
ils annuleront l'opération.
Pour plus de détails, vous pouvez consulter Illuminer/Base de données/Eloquent/Modèle et vous y trouverez tous les événements, recherchez les utilisations de static::registerModelEvent
y $this->fireModelEvent
.
Les événements sur les modèles Eloquent sont structurés comme suit eloquent.{$event}: {$class}
et transmet l'instance de modèle en tant que paramètre.
Je suis resté bloqué sur ce point parce que j'ai supposé que s'abonner aux événements du modèle par défaut comme Event:listen('user.created',function($user) aurait fonctionné (comme je l'ai dit dans un commentaire). Jusqu'à présent, j'ai vu ces options fonctionner dans l'exemple du modèle par défaut de l'événement user created :
//This will work in general, but not in the start.php file
User::created(function($user)....
//this will work in the start.php file
Event::listen('eloquent.created: User', function($user)....