如何临时禁用模型观察者

在开发过程中我们会遇到需要临时禁用模型监听器的情况,比如有这么一个例子:

使用定义了一个订单模型的观察者:


namespaceApp\Observers;

useApp\Order;

useApp\Services\SMS;

useIlluminate\Http\Request;

/**

* Order observer.

*/

classOrderObserver

{

/**

* After order created.

*

* @param Order $order

*/

publicfunctioncreated(Order$order)

{

(newSMS())->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条假订单

转载来源合伴站点:LARAVEL.SO


如果你觉得眼前需要更好的提高你可以来千锋学PHP,国内排名第一的PHP机构。

你可能感兴趣的:(如何临时禁用模型观察者)