è in laravel tali callback come:laravel modello callback dopo salvare, prima di salvare, ecc
afterSave()
beforeSave()
etc
ho cercato ma non trovò nulla. Se non ci sono cose del genere - qual è il modo migliore per implementarlo?
Grazie!
è in laravel tali callback come:laravel modello callback dopo salvare, prima di salvare, ecc
afterSave()
beforeSave()
etc
ho cercato ma non trovò nulla. Se non ci sono cose del genere - qual è il modo migliore per implementarlo?
Grazie!
In realtà, Laravel ha una vera callback prima di | after save | update | crea qualche modello. controllare questo:
https://github.com/laravel/laravel/blob/3.0/laravel/database/eloquent/model.php#L362
l'EventListener come salvato e risparmio sono i veri callback
$this->fire_event('saving');
$this->fire_event('saved');
come possiamo lavorare con questo? basta assegnare a questo esempio eventListener:
\Laravel\Event::listen('eloquent.saving: User', function($user){
$user->saving();//your event or model function
});
Il modo migliore per ottenere prima e dopo salvare i callback per estendere la funzione save()
.
Ecco un rapido esempio
class Page extends Eloquent {
public function save(array $options = [])
{
// before save code
parent::save();
// after save code
}
}
Così ora quando si salva un oggetto pagina il suo save()
funzione get chiamata, che include la funzione parent::save()
;
$page = new Page;
$page->title = 'My Title';
$page->save();
Questa è la soluzione migliore per rendendo funziona come CakePHP AfterSave() e BeforeSave(). In alternativa, ci sono hook di eventi nel metodo save() se si desidera applicarlo globalmente. –
qui devi stare molto attento dato che non stai operando all'interno di una transazione di database. parent :: save(); completa una transizione del database. Se si salva prima e dopo, saranno anche transazioni complete. Se è necessario assicurarsi che tutti i salvataggi avvengano o falliscano, è necessario avvolgerli in un DB :: transaction(). –
il modo migliore per farlo in Laravel 4 è per l'utente osservatore: http://laravel.com/docs/eloquent#model-events –
Se si desidera controllare il modello stesso, è possibile ignorare la funzione di salvare e inserire il codice prima o dopo __parent::save()
.
Altrimenti, c'è un evento attivato da ciascun modello Eloquent prima che si salva.
Vi sono anche due eventi attivati quando Eloquent salva un modello.
"eloquent.saving: model_name" o "eloquent.saved: model_name".
Un elenco completo di eventi che è possibile utilizzare, http://stackoverflow.com/questions/13059744/where-can-i-get-a-complete-list-of- laravel-events-fired-by-the-core-libaries – crynobone
Anche se questa domanda è già stata segnata 'accettato' - sto aggiungendo una nuova risposta aggiornato per laravel 4.
Beta 4 of Laravel 4 has just introduced hook events for Eloquent save events - quindi non avete bisogno di estendere più il nucleo:
Aggiunti i metodi Model :: creation (Closure) e Model :: update (Closure) per l'aggancio in eventi di salvataggio Eloquent. Grazie a Phil Sturgeon per avermi finalmente fatto pressione in questo ... :)
Aggiungendo un esempio per laravel 4:
class Page extends Eloquent {
public static function boot()
{
parent::boot();
static::creating(function($page)
{
// do stuff
});
static::updating(function($page)
{
// do stuff
});
}
}
Ho passato un po 'di tempo a chiedermi perché quanto sopra non funziona nei miei test. C'è una discussione al riguardo qui: https://github.com/laravel/framework/issues/1181. Puoi mettere il binding in global.php per risolvere il problema. –
Suggerisco questa risposta per gli osservatori http://stackoverflow.com/a/24773838/1275911 –
Questa non è più la migliore risposta con Laravel 4. http://laravel.com/docs/5.0/eloquent#model-events – Lotus
La documentazione più completa che spiega gli Eventi del Modello si trova nella documentazione principale qui: https://laravel.com/docs/master/eloquent#events –