Laravel 4.2自定义观察者事件
我的应用程序文件夹下有一个名为observers的目录,我可以侦听各种事件,例如创建,更新,...以及我处理它们! 我的观察员事件bootstrap在我的模型启动功能! 例如我有模型文件夹下的用户模型,我有观察者文件夹下的UserObserver! 现在我需要将我的具体事件添加到雄辩的观察者! 考虑当我的用户表的“启用”之类的列发生改变时,我想要触发事件。 我知道我应该延长雄辩模型并添加一个功能类似userchangestate()怎么我已经抬头雄辩模型,可以对每一个事件(“创造”的功能,“创造”,“节能”,“拯救”,... ),但我仍然不确定如何处理它! 谢谢 !
我假设我上面的评论是真的,已经多次阅读这个问题来尝试理解它。
我会通过在保存事件期间检查属性是否dirty
(更改)以及如果自定义事件已随其新值更改而执行此操作。
在你的观察者类的依赖注入调度器(IoC将自动为你做这件事)。
use IlluminateEventsDispatcher;
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 IlluminateEventsDispatcher;
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
}
}
感谢大卫,我得到了我的答案:
<?php
use IlluminateEventsDispatcher;
class News extends Magniloquent {
protected $fillable = [];
public $table = 'news';
public static function boot()
{
parent::boot();
News::observe(new NewsObserver(new Dispatcher));
}
}
我的观察者如下:
<?php
use IlluminateEventsDispatcher;
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()
事件会自动触发。