您可以創建爲您完成此事件:
class ProductChangeEvent {
use SerializesModels;//Maybe needed
public $parameters;
public function __construct($parameters) {
$this->parameters = $parameters;
}
}
可選這個類可以實現ShouldQueue
接口,允許它推遲。
您可以通過一個傾聽者處理該事件:
class ProductChangeListener {
public function handle(ProductChangeEvent $event) {
switch ($event->parameters["NotificationType"]) {
//more cases?
case "Product Change":
default:
$this->handleProductChange($event);
}
}
protected function handleProductChange(ProductChangeEvent $event) {
if ($event->parameters["ChangeType"] == "Update") {
//Handle update product change
}
}
}
顯然,這只是一個例子。根據您的實際使用情況,您可以分解功能和案例。
然後,您可以在路由處理引發此事件:
Route::get("/eventListenerCallback", function (Request $req) {
$parameters = json_decode($request->getContent(), true); //Is this right?
event(new ProductChangeEvent($parameters));
});
我想創建一個[事件](https://laravel.com/docs/5.5/events#defining-events),有控制器會提升/調度它並在[事件監聽器](https://laravel.com/docs/5.5/events#defining-listeners)中擁有邏輯。 – apokryfos
這是一個非常好的解決方案。謝謝!但是當通知遇到路線時,是否有機會派發事件?我的意思是,是否有任何解決方案在路由器中調度事件? –
'event()'助手通常是可用的,所以你可以做一些像'event(new ProductChangeEvent($ jsonArrayOfParameters))'或類似的東西。這可以在任何地方調用(例如,在路由動作回調中)。如果你的事件實現了'ShouldQueue'接口,那麼它也可以被添加到隊列中以延遲處理。 – apokryfos