symfony service Создание собственного сервиса. Пример

Рассматриваемые вопросы

  • как создать собственный Сервис. На примере класса MailSender() (отправляет email-ы с обратной связью администратору сайта)
  • как передать параметры в Сервис из конфигураций

Пример

  1. Создаём класс в директории AppBundle\Service
    Как установить и настроить SwiftmailerBundle можно прочитать здесь.
    <?php
    
    namespace AppBundle\Service;
    
    // Используем SwiftmailerBundle непосредственно для отправки сообщений
    use Swift_Mailer;
    use Swift_Message;
    use Twig_Environment;
    
    class MailSender
    {
        /**
         * @var string
         */
        private $adminEmail;
        
        /**
         * @var Swift_Mailer
         */
        private $mailer;
        
        public function __construct(Swift_Mailer $mailer, Twig_Environment $twig, string $adminEmail) 
        {
           // это argument, который можно указать в конфигурации сервиса (см. ниже)
            $this->adminEmail = $adminEmail;
           // это объект-отправщик сообщений
            $this->mailer = $mailer;
           // это объект-шаблон(т.к. мы не в контроллере, он будет вызывать метод render)
            $this->twig = $twig;
        }
        
        /**
         * @param array $userFeedbackData
         */
        public function sendFeedback(array $userFeedbackData): void
        {
            $message = (new Swift_Message('Feedback Email'))
                ->setFrom('tehnic_email_mail.ru')
                ->setTo($this->adminEmail)
                ->setBody(
                    $this->twig->render(
                        'feedback/feedback_email.html.twig', [
                            'name' => $userFeedbackData['name'],
                            'phone' => $userFeedbackData['phone'],
                            'message' => $userFeedbackData['message'],
                    ]),
                    'text/html');
            
            $this->mailer->send($message);
        }
    }
  2. Настраиваем конфигурации в services.yml
        AppBundle\Service\MailSender:
            arguments:
                $adminEmail: admin_email_mail.ru

    Аргумент можно принять в контроллере сервиса в качестве параметра

  3. Вызываем описанный метод в контроллере
    $mailSender->sendFeedback($form->getData());

Всё)

Источники

http://symfony.com/doc/current/service_c...