djuro95

EventListener

Mar 8th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.17 KB | None | 0 0
  1. Event/Listener
  2.  
  3. *event
  4. src/AppBundle/Event
  5.  
  6. za svaki event pravimo dvije klase jednu sa konstantama
  7.  
  8. DemoEvents
  9.  
  10. final class DemoEvents
  11. {
  12.  
  13. const SUBMITTED = 'influence.demo.submitted';
  14. const SCHEDULED = 'influence.demo.scheduled';
  15.  
  16. }
  17.  
  18. jednu za logiku eventa
  19.  
  20. class DemoEvent extends Event
  21. {
  22.  
  23. /**
  24. * @var Demo $_demo
  25. */
  26. private $_demo;
  27.  
  28. public function __construct(Demo $demo)
  29. {
  30. $this->_demo = $demo;
  31. }
  32.  
  33. /**
  34. * @return Demo
  35. */
  36. public function getDemo(): Demo
  37. {
  38. return $this->_demo;
  39. }
  40.  
  41. }
  42.  
  43. -------------------------------------
  44. listener
  45.  
  46. src/AppBundle/listener/EmailNotification
  47.  
  48. koristimo folder EmailNotification za sumbitted bundle jer nakon svakog sumbitovanog demoa saljemo email adminu
  49.  
  50.  
  51. class DemoEventListener
  52. {
  53. /**
  54. * @var MailTwigEnvironment|\Twig_Environment
  55. */
  56. protected $twig;
  57.  
  58. /**
  59. * @var \Swift_Mailer
  60. */
  61. protected $mailer;
  62.  
  63. /**
  64. * @var string
  65. */
  66. protected $from;
  67.  
  68. /**
  69. * @var string
  70. */
  71. protected $appName;
  72.  
  73. public function __construct(MailTwigEnvironment $twig, \Swift_Mailer $mailer, $from, $appName)
  74. {
  75. $this->twig = $twig;
  76. $this->mailer = $mailer;
  77. $this->from = $from;
  78. $this->appName = $appName;
  79. }
  80.  
  81. public function onSubmited(DemoEvent $event)
  82. {
  83.  
  84. $template = ':email/demo:submited.html.twig';
  85. $this->sendMail($template, $event);
  86.  
  87. }
  88.  
  89.  
  90. public function onScheduled(DemoEvent $event)
  91. {
  92.  
  93. $template = ':email/demo:scheduled.html.twig';
  94. $this->sendMail($template, $event);
  95.  
  96. }
  97.  
  98.  
  99. /**
  100. * Sends a mail
  101. *
  102. * @param $template
  103. * @param DemoEvent $event
  104. */
  105. private function sendMail($template, DemoEvent $event)
  106. {
  107.  
  108.  
  109. $subject = $this->twig->renderBlock($template, 'subject', [
  110. 'name' => $event->getDemo()->getName(),
  111. ]);
  112. $body = $this->twig->renderBlock($template, 'body', [
  113. 'demo' => $event->getDemo(),
  114. ]);
  115.  
  116. $message = \Swift_Message::newInstance()
  117. ->setTo("florian@influencevision.com")
  118. ->setSubject($subject)
  119. ->setBody($body)
  120. ->setFrom([$this->from => '[NoReply] ' . $this->appName])
  121. ->setContentType("text/html");
  122.  
  123. $this->mailer->send($message);
  124.  
  125.  
  126. }
  127.  
  128. }
  129.  
  130. ----------------------------------------------------------------------------
  131.  
  132. listenere je potrebno registrovati u config/services/email_notification.yml
  133.  
  134. influence.listener.demo:
  135. class: AppBundle\Listener\EmailNotification\DemoEventListener
  136. arguments: ['@influence.mail.twig', '@mailer', '%influence.activity_log.mail.from%', '%influence.app_name%']
  137. public: false
  138. tags:
  139. - { name: kernel.event_listener, event: influence.demo.submitted, method: onSubmited }
  140.  
  141.  
  142.  
  143. '%influence.activity_log.mail.from%' - parametar koji je definisan u app/config/parameters.yml
  144.  
  145. '%..%' - parametri koji su definisani u parameters.yml
  146.  
  147. '@influence.mail.twig' - parametar koji je vec definisan u symfony-ju (kada pocinje sa @)
  148.  
  149. event: influence.demo.submitted - event koji je definisan u DemoEvens
  150.  
  151. method: onSubmited - metoda u DemoEventListener
  152.  
  153. arguments se prosledjuju u konstruktor klase DemoEventListener
  154.  
  155. ----------------------------------------------------
  156.  
  157. view - Twig
  158.  
  159. mozemo da iskoristimo vec postojeci templejt (ne pravimo svoj folder)
  160. app/Resources/views/email/demo/submited.html.twig
  161.  
  162. *********
  163. {% extends ':email/layout/'~ locale ~':index.html.twig' %}
  164.  
  165. {% block subject %} {{ 'mail.demo.submited.subject' | trans({}, 'messages') }} {% endblock subject %}
  166.  
  167. {% block mail_title %}
  168. {{ 'mail.demo.submited.title' | trans({'{{ recipient }}': demo.name}, 'messages') }}
  169. {% endblock mail_title %}
  170.  
  171. {% block mail_body %}
  172. {{ 'mail.demo.submited.body' | trans({'{{ name }}' : demo.name, '{{ company }}' : demo.company}, 'messages') }}
  173. {% endblock mail_body %}
  174.  
  175. {% block mail_action_link %}
  176. {{ project_domain ~ path('app_campaign_show', { campaign: campaign.id }) }}
  177. {% endblock mail_action_link %}
  178.  
  179. {% block mail_action_text %}
  180. {{ 'mail.demo.submited.action' | trans({}, 'messages') }}
  181. {% endblock mail_action_text %}
  182.  
  183. ********
  184. npr. app/Resources/translation/messages.en.yml
  185.  
  186. mail.demo.submited.subject
  187.  
  188. mail:
  189. ...
  190. demo:
  191. submited:
  192. subject: New demo request
  193. title: 'Hello {{ recipient }},'
  194. body: 'The briefing on the campaign {{ campaign }} has been updated. {{ company }} Simply open campaign and see
  195. details or changes!'
  196. action: Open campaign
  197.  
  198.  
  199. trans() za message je defaultni i ne treda ga definisati
  200. {{ project_domain ~ path('admin_dashboard') }} je putanja za akciju koju definisemo
  201.  
  202.  
  203. ------------------------
  204.  
  205.  
  206. event okidamo u COntroller/Homepage/Seo/DemoCOntroller
  207.  
  208. get('event_dispatcher') ne moramo dodavati kao parametar funkcije
Add Comment
Please, Sign In to add comment