2016年9月30日 星期五

如何临时禁用模型 观察者

在开发过程中我们会遇到需要临时禁用模型监听器的情况,比如有这么一个例子:
使用定义了一个订单模型的观察者:
// OrderObserver.php


namespace App\Observers;

use App\Order;
use App\Services\SMS;
use Illuminate\Http\Request;

/**
 * Order observer.
 */
class OrderObserver
{

    /**
     * After order created.
     *
     * @param Order $order
     */
    public function created(Order $order)
    {
        (new SMS())->send('order_created', $order->consumer_phone, [$order->no]);
    }
}
它监听了一个 created 事件,即在订单创建后给用户发个短信。
在使用 faker 在 db:seed 填充数据的时候,我们是不需要给用户发短信的,这时候我们就希望能临时禁用掉观察者。
在 Laravel 模型里其实已经预留了一个方法:Model::unsetEventDispatcher(); 可以移除事件调度器。我们就可以在 seed 文件里使用它来完成了这个需求了:
Order::unsetEventDispatcher();

factory(App\Order::class, 10)->create(); // 创建10条假订单

from : http://laravel.so/tricks/f510d6530c7736f24c9398ac3b647aad

沒有留言:

wibiya widget