Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. // Код без ивентов:
  2.  
  3. function controllerCreateOrderAction($request, $SmsService, $EmailService){
  4. $order= Order::createByRequest($request);
  5. $SmsService->sendSmsToAdmin($order);
  6. $EmailService->sendConfirmEmail($order);
  7. }
  8. // Конец кода без инвентов
  9.  
  10. //Код с ивентами:
  11. function controllerCreateOrderAction($request, $SmsService, $EmailService){
  12. $order= Order::createByRequest($request);
  13. event('order.create', new CreateOrderEvent($order));
  14. }
  15. // регистрируем ивент
  16. $eventDispatcher->addSubscriber('order.create',[SmsSender::class, EmailSender::class]);
  17.  
  18. // создаем обработчик ивента смс оповещений. Он должен принимать ивент определенного интерфейса.
  19. class SmsSender{
  20. public function handle(SmsSendAbledEventInterface $event){
  21. $this->smsService->sendSms($event->getPhone(), $event->getSmsText());
  22. }
  23. }
  24. // аналогично
  25. class EmailSender{
  26. public function handle(EmailSendAbledEventInterface $event){
  27. $this->smsService->sendSms($event->getEmail(),$event->getEmailSubject(), $event->getEmailText());
  28. }
  29. }
  30. // интерфейс ивентов для рассылки смс
  31. SmsSendAbledEventInterface smsSendAbledEventInterface{
  32. public function getPhone();
  33. public function getSmsText();
  34. }
  35. // интерфейс ивентов для рассылки почты
  36. SmsSendAbledEventInterface EmailSendAbledEventInterface{
  37. public function getEmail();
  38. public function getEmailSubject();
  39. public function getEmailText();
  40. }
  41.  
  42. // Ивент на создание заказа.
  43. class CreateOrderEvent implements SmsSendAbledEventInterface, SmsSendAbledEventInterface{
  44. public function getPhone(){
  45. return $this->order->getUser()->getPhone();
  46. };
  47. public function getSmsText(){
  48. return "У вас новый заказ товарищ ". $this->order->getUser()->getName();
  49. }
  50. // и т.д.
  51. public function getEmail();
  52. public function getEmailSubject();
  53. public function getEmailText();
  54. }
  55. // конец кода с ивентами. Где профит?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement