是在Laravel的回調,如:laravel模型回調後保存,之前保存等
afterSave()
beforeSave()
etc
我搜查,但一無所獲。如果沒有這樣的事情 - 實施它的最好方法是什麼?
謝謝!
是在Laravel的回調,如:laravel模型回調後保存,之前保存等
afterSave()
beforeSave()
etc
我搜查,但一無所獲。如果沒有這樣的事情 - 實施它的最好方法是什麼?
謝謝!
實際上,Laravel在保存|更新|創建一些模型之前有真正的回調。檢查:
https://github.com/laravel/laravel/blob/3.0/laravel/database/eloquent/model.php#L362
像保存,保存事件監聽是真正的回調
$this->fire_event('saving');
$this->fire_event('saved');
我們如何能與這項工作?只是把它分配給此事件監聽例如:
\Laravel\Event::listen('eloquent.saving: User', function($user){
$user->saving();//your event or model function
});
實現保存回調之前和之後的最佳方式是擴展save()
函數。
這裏有一個簡單的例子
class Page extends Eloquent {
public function save(array $options = [])
{
// before save code
parent::save();
// after save code
}
}
所以,現在當您保存頁面對象及其save()
函數被調用其中包括parent::save()
功能;
$page = new Page;
$page->title = 'My Title';
$page->save();
這是使得它的功能就像CakePHP的afterSave()和beforeSave)的最佳解決方案(。或者,如果要全局應用save()方法,則會有事件掛鉤。 –
由於您沒有在數據庫事務中操作,因此您需要非常小心。父::保存();完成數據庫轉換。如果您在前後保存,它們也將是完整的交易。如果您需要確保所有的保存都發生或失敗,那麼您需要將它們包裝在一個DB :: transaction()中。 –
在Laravel 4中執行此操作的最佳方法是向用戶觀察者:http://laravel.com/docs/eloquent#model-events –
如果要對模型本身控制,你可以重寫保存功能和之前或之後__parent::save()
把你的代碼。
否則,每個Eloquent模型在保存之前都會觸發一個事件。
當Eloquent保存模型時也會觸發兩個事件。
「eloquent.saving:model_name」或「eloquent.saved:model_name」。
可以使用的事件的完整列表,http://stackoverflow.com/questions/13059744/where-can-i-get-a-complete-list-of- laravel-events-by-core-libaries – crynobone
儘管這個問題已經被標記爲「接受」 - 我加入了新的更新答案Laravel 4
Beta 4 of Laravel 4 has just introduced hook events for Eloquent save events - 所以你不需要再擴展核心:
增加了Model :: creating(Closure)和Model :: updating(Closure)方法來掛鉤Eloquent保存事件。感謝Phil Sturgeon終於迫使我這樣做了...... :)
添加在一個例子Laravel 4:
class Page extends Eloquent {
public static function boot()
{
parent::boot();
static::creating(function($page)
{
// do stuff
});
static::updating(function($page)
{
// do stuff
});
}
}
我花了一些時間想知道爲什麼上述不起作用在我的測試。這裏有一個討論:https://github.com/laravel/framework/issues/1181。您可以將綁定放在global.php中來解決問題。 –
我向觀察員建議這個答案http://stackoverflow.com/a/24773838/1275911 –
這不再是Laravel 4的最佳答案。http://laravel.com/docs/5.0/eloquent#model-events – Lotus
最完整的文檔解釋模型事件是在這裏的主文檔中找到:https://laravel.com/docs/master/eloquent#events –