@Zeboton

Symfony2 / SonataAdminBundle / Как отправить email базирующегося на шаблоне после редактирования записи?

Всем привет!

Есть следующая задача. Нужно отправить письмо, которое базируется на шаблоне, после того, как было произведено редактирование записи при помощи SonataAdminBundle.
  • Вопрос задан
  • 2477 просмотров
Решения вопроса 2
0neS
@0neS
Судя по документации, Вам доступны события:
  • sonata.admin.event.persistence.pre_update
  • sonata.admin.event.persistence.pre_persist
  • sonata.admin.event.persistence.post_persist
  • sonata.admin.event.persistence.pre_remove
  • sonata.admin.event.persistence.post_remove

Гуглите, как в symfony создать even listener, подписанный на нужное событие.
Ответ написан
Комментировать
@Zeboton Автор вопроса
Иван, спасибо! Я совсем забыл об EventListener!

Итак, моё решение.

В директории VendorName/SiteBundle/EventListener создаём файл AdminApplicationListener.php со следующим содержимым:
<?php

namespace VendorName\SiteBundle\EventListener;

class AdminApplicationListener
{
    /**
     *
     * var Swift_Mailer
     */
    private $__mailer = null;
    private $__templating = null;
    
    public function __construct(\Swift_Mailer $mailer, $templating)
    {
        $this->__mailer = $mailer;
        $this->__templating = $templating;
    }
    
    public function onApplication( \Sonata\AdminBundle\Event\PersistenceEvent $event )
    {       
        $ac = $event->getObject();
        
        $message = \Swift_Message::newInstance()
            ->setContentType('text/html')
            ->setSubject('[VendorName] Изменение записи')
            ->setFrom('admin@VendorName.ru')
            ->setTo($ac->getEmail())
            ->setBody(
                $this->__templating->render(
                    'VendorNameSiteBundle:Admin:email.html.twig',
                    array('name' => $ac->getFirstName())
                )
            )
        ;
        $this->__mailer->send($message);

    }
}


В файле VendorName/SiteBundle/Resources/config/services.yml добавляем строки:
services:
    vendor_name.admin.on_application:
        class: VendorName\SiteBundle\EventListener\AdminApplicationListener
        arguments:
            mailer: @mailer
            templating: @templating
        tags:
            - { name: kernel.event_listener, event: sonata.admin.event.persistence.post_update, method: onApplication }


После этого начинают отправляться письма с отрендеренным шаблоном.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы