Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Event/Listener
- *event
- src/AppBundle/Event
- za svaki event pravimo dvije klase jednu sa konstantama
- DemoEvents
- final class DemoEvents
- {
- const SUBMITTED = 'influence.demo.submitted';
- const SCHEDULED = 'influence.demo.scheduled';
- }
- jednu za logiku eventa
- class DemoEvent extends Event
- {
- /**
- * @var Demo $_demo
- */
- private $_demo;
- public function __construct(Demo $demo)
- {
- $this->_demo = $demo;
- }
- /**
- * @return Demo
- */
- public function getDemo(): Demo
- {
- return $this->_demo;
- }
- }
- -------------------------------------
- listener
- src/AppBundle/listener/EmailNotification
- koristimo folder EmailNotification za sumbitted bundle jer nakon svakog sumbitovanog demoa saljemo email adminu
- class DemoEventListener
- {
- /**
- * @var MailTwigEnvironment|\Twig_Environment
- */
- protected $twig;
- /**
- * @var \Swift_Mailer
- */
- protected $mailer;
- /**
- * @var string
- */
- protected $from;
- /**
- * @var string
- */
- protected $appName;
- public function __construct(MailTwigEnvironment $twig, \Swift_Mailer $mailer, $from, $appName)
- {
- $this->twig = $twig;
- $this->mailer = $mailer;
- $this->from = $from;
- $this->appName = $appName;
- }
- public function onSubmited(DemoEvent $event)
- {
- $template = ':email/demo:submited.html.twig';
- $this->sendMail($template, $event);
- }
- public function onScheduled(DemoEvent $event)
- {
- $template = ':email/demo:scheduled.html.twig';
- $this->sendMail($template, $event);
- }
- /**
- * Sends a mail
- *
- * @param $template
- * @param DemoEvent $event
- */
- private function sendMail($template, DemoEvent $event)
- {
- $subject = $this->twig->renderBlock($template, 'subject', [
- 'name' => $event->getDemo()->getName(),
- ]);
- $body = $this->twig->renderBlock($template, 'body', [
- 'demo' => $event->getDemo(),
- ]);
- $message = \Swift_Message::newInstance()
- ->setTo("florian@influencevision.com")
- ->setSubject($subject)
- ->setBody($body)
- ->setFrom([$this->from => '[NoReply] ' . $this->appName])
- ->setContentType("text/html");
- $this->mailer->send($message);
- }
- }
- ----------------------------------------------------------------------------
- listenere je potrebno registrovati u config/services/email_notification.yml
- influence.listener.demo:
- class: AppBundle\Listener\EmailNotification\DemoEventListener
- arguments: ['@influence.mail.twig', '@mailer', '%influence.activity_log.mail.from%', '%influence.app_name%']
- public: false
- tags:
- - { name: kernel.event_listener, event: influence.demo.submitted, method: onSubmited }
- '%influence.activity_log.mail.from%' - parametar koji je definisan u app/config/parameters.yml
- '%..%' - parametri koji su definisani u parameters.yml
- '@influence.mail.twig' - parametar koji je vec definisan u symfony-ju (kada pocinje sa @)
- event: influence.demo.submitted - event koji je definisan u DemoEvens
- method: onSubmited - metoda u DemoEventListener
- arguments se prosledjuju u konstruktor klase DemoEventListener
- ----------------------------------------------------
- view - Twig
- mozemo da iskoristimo vec postojeci templejt (ne pravimo svoj folder)
- app/Resources/views/email/demo/submited.html.twig
- *********
- {% extends ':email/layout/'~ locale ~':index.html.twig' %}
- {% block subject %} {{ 'mail.demo.submited.subject' | trans({}, 'messages') }} {% endblock subject %}
- {% block mail_title %}
- {{ 'mail.demo.submited.title' | trans({'{{ recipient }}': demo.name}, 'messages') }}
- {% endblock mail_title %}
- {% block mail_body %}
- {{ 'mail.demo.submited.body' | trans({'{{ name }}' : demo.name, '{{ company }}' : demo.company}, 'messages') }}
- {% endblock mail_body %}
- {% block mail_action_link %}
- {{ project_domain ~ path('app_campaign_show', { campaign: campaign.id }) }}
- {% endblock mail_action_link %}
- {% block mail_action_text %}
- {{ 'mail.demo.submited.action' | trans({}, 'messages') }}
- {% endblock mail_action_text %}
- ********
- npr. app/Resources/translation/messages.en.yml
- mail.demo.submited.subject
- mail:
- ...
- demo:
- submited:
- subject: New demo request
- title: 'Hello {{ recipient }},'
- body: 'The briefing on the campaign {{ campaign }} has been updated. {{ company }} Simply open campaign and see
- details or changes!'
- action: Open campaign
- trans() za message je defaultni i ne treda ga definisati
- {{ project_domain ~ path('admin_dashboard') }} je putanja za akciju koju definisemo
- ------------------------
- event okidamo u COntroller/Homepage/Seo/DemoCOntroller
- get('event_dispatcher') ne moramo dodavati kao parametar funkcije
Add Comment
Please, Sign In to add comment