我有一個名爲觀察者的應用程序文件夾下有一個目錄,我監聽各種事件,比如創建,更新......以及我處理它們! 我的觀察者事件bootstrap是在我的模型啓動功能! 例如我有模型文件夾下的用戶模型,我有觀察者文件夾下的UserObserver! 現在我需要將我的具體事件添加到雄辯的觀察者!考慮當我的用戶表的「啓用」之類的列發生改變時,我想要觸發事件。 我知道我應該擴展雄辯的模型,並添加一個像userchangestate() 因爲我已經查找了雄辯模型它有一個函數爲每個事件('創建','創建','保存','保存',。 ...) 但我仍然不確定如何處理它! 謝謝!Laravel 4.2自定義觀察器事件
回答
我假設我上面的評論是真的,閱讀了很多次這個問題,試圖理解它。
我會這樣做,通過檢查保存事件期間屬性是否爲dirty
(更改)以及如果自定義事件隨其新值更改而觸發自定義事件。
在您的觀察者類依賴項中注入調度程序(IoC將自動爲您執行此操作)。
use Illuminate\Events\Dispatcher;
class UserObserver {
protected $events;
public function __construct(Dispatcher $dispatcher)
{
$this->events = $dispatcher;
// Set up a listener for your modified event to run a method
// on this class
$this->events->listen('myevent.modified', [$this, 'changeState']);
}
public function saving($model)
{
if ($model->isDirty(['attribute'])
{
$this->events->fire('myevent.modified', [$model->attribute]);
}
}
public function changeState($value)
{
// Handle your event here
}
}
您現在可以使用簽名myevent.modified
在任何地方收聽此事件。
編輯在偵聽器中添加到構造函數中,並將事件回調推送到changeState
方法。
如果你不需要一個事件發生,你可以直接推動結果。
use Illuminate\Events\Dispatcher;
class UserObserver {
protected $events;
public function __construct(Dispatcher $dispatcher)
{
$this->events = $dispatcher;
}
public function saving($model)
{
if ($model->isDirty(['attribute'])
{
$this->changeState($model->attribute);
}
}
public function changeState($value)
{
// Handle your event here
}
}
謝謝大衛!它工作只是我有錯誤是: – mhndev 2014-10-17 10:42:14
Np,錯誤是什麼? – 2014-10-17 10:43:25
謝謝大衛!給我你的時間!非常appriciated!首先我有一個錯誤是:傳遞給NewsObserver :: __ construct()的參數1必須是Illuminate \ Events \ Dispatch的一個實例,當我在啓動函數中傳遞Dispatch對象以觀察模型中的函數時它工作正常!我只想讓我的觀察者類有一個名爲「changestate」的方法,就像「創建」,「保存」,..捕獲事件並處理它!可能嗎??再次感謝! – mhndev 2014-10-17 10:49:45
感謝David我有我的回答是:
<?php
use Illuminate\Events\Dispatcher;
class News extends Magniloquent {
protected $fillable = [];
public $table = 'news';
public static function boot()
{
parent::boot();
News::observe(new NewsObserver(new Dispatcher));
}
}
我的觀察是如下:
<?php
use Illuminate\Events\Dispatcher;
class NewsObserver
{
protected $events;
public function __construct(Dispatcher $dispatcher)
{
$this->events = $dispatcher;
}
public function saving($model)
{
if ($model->isDirty(['publish']))
{
$this->changeState($model->publish);
}
}
public function changeState($value)
{
//do my stuff
}
}
這對我的作品!
當我的news
表中的publish
列發生變化時,NewsObserver::changeState()
事件被自動觸發。
- 1. 自定義事件(觀察者模式)
- 2. Magento:在自定義觀察器中發送自定義事務電子郵件
- 3. 如何觀察AngularJS中的自定義事件?
- 4. 觀察RxJava中的基本自定義事件
- 5. 自定義事件總線與RxJava/RxAndroid的後備觀察員?
- 6. 無法觀察Aurelia自定義屬性中的引導事件
- 7. MAgento自定義事件觀察員更新股票
- 8. 在core_block_abstract_to_html_after事件中使用觀察者獲取自定義phtml內容事件
- 9. 自定義事件應用洞察
- 10. 事件:從觀察獲得事件觀察者
- 11. 一個可觀察事件的多個可觀察事件
- 12. Magento的事件觀察:修改CatalogSearch包括(自定義Magento的使用事件/觀察員)下面的鏈接自定義屬性
- 13. Ruby on Rails自定義觀察者
- 14. 觀察自定義單元格
- 15. 導軌觀察者自定義回調
- 16. NSNotificationCenter vs自定義觀察者協議
- 17. 自定義事件外觀primefaces計劃
- 18. Qt嵌入式Linux事件觀察器
- 19. 觀察特定類型的事件
- 20. knockoutjs,通過自定義綁定修改時未觀察到可觀察陣列
- 21. 觀察渲染事件
- 22. 觀察calloc,malloc,新事件
- 23. Spring - JPA - 觀察事件
- 24. 觀察多個CDI事件?
- 25. magento事件觀察者(magento1.7)
- 26. 創建2路與觀察到的插件自定義綁定
- 27. 事件觀察員 - 觸發事件
- 28. 找不到Magento中事件觀察者類的函數定義
- 29. 自動sys文件觀察器作業
- 30. Laravel 4.2自定義驗證器組合required_if OR required_without
所以你正在尋找一種方式來觸發一個事件,當一個特定的列值發生了變化,而不僅僅是模型保存/保存等? – 2014-10-17 09:42:35
是axacltly謝謝 – mhndev 2014-10-17 10:07:05
好吧,看到下面的答案;-) – 2014-10-17 10:07:36