在开发过程中我们会遇到需要临时禁用模型监听器的情况,比如有这么一个例子:
使用定义了一个订单模型的观察者:
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机构。
网友评论