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

链接地址: http://www.djcxy.com/p/83197.html

上一篇: Laravel 4.2 custom Observer Event

下一篇: How to use model events with query builder in laravel