我有一个名为观察者的应用程序文件夹下有一个目录,我监听各种事件,比如创建,更新......以及我处理它们! 我的观察者事件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