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()事件会自动触发。 
