Symfony 3.4: изменение настроек smtp SwiftMailer

Я новичок в Symfony. Мы используем Symfony 3.4 и FOSUserBundle. Этот клиент хотел бы указать свои собственные настройки SMTP-сервера (хост, порт, пароль и т. д.) Через интерфейс и сохранить их в таблице базы данных. Я исследовал способы сделать это и обнаружил, что эта многообещающая ветка делает именно это с помощью прослушивателя событий (ответ Мун Мун Дас):

Динамическое изменение настроек smtp в SwiftMailer

К сожалению, я думаю, что это был непроверенный код, и у меня возникли проблемы с его реализацией. Я пробовал много вещей, чтобы обойти текущую проблему, но решил начать заново. После нескольких первых очевидных исправлений этого кода мой слушатель выглядит так:

<?php

namespace AppBundle\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class SwiftMailerListener implements EventSubscriberInterface
{

    private $transport;
    private $em;

    public function __construct($transport, $em)
    {
        $this->transport = $transport;
        $this->em = $em;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        $this->transport->setHost("host");
        $this->transport->setPort("port");
        $this->transport->setUserName("username");
        $this->transport->setPassword("pass");
    }

    static public function getSubscribedEvents()
    {
        return array(
            KernelEvents::REQUEST => array('onKernelRequest', 0)
        );
    }

}

и соответствующая часть в services.yml:

swiftmailer_listener:
    class: AppBundle\EventListener\SwiftMailerListener
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
    arguments: ["@swiftmailer.transport.real", "@doctrine.orm.entity_manager"]         

Это дает мне ошибку:

(1/1) RuntimeException Cannot autowire service
"AppBundle\EventListener\SwiftMailerListener": argument "$transport" 
of method "__construct()" must have a type-hint or be given a value
explicitly.

Сейчас я изо всех сил пытаюсь понять, какой тип-подсказку использовать (все еще понимая «местность» Symfony) и почему это необходимо здесь, а не в примере.

Есть ли идеи для исправления, подходящее направление исследования или даже альтернативный подход к тому, что я пытаюсь достичь?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
0
517
2

Ответы 2

Если вы определяете свою службу в файле service.yml в папке вашего пакета, попробуйте переместить ее в основной файл служб "app / config / services.yml", см. Этот ссылка на сайт

Я определяю его в app / config / services.yml, но спасибо за ссылку. Я проверю.

MichaelBrock 16.06.2018 16:44

Может он не может найти swiftmailer.transport.real.

Попробуйте использовать только @mailer А в symfony 3.4 вы можете использовать только внедрение зависимостей и автоматическое подключение.

Если вы хотите динамически изменять хост и порт, вы можете использовать переменные окружения, которые уже существуют в symfony 3.4. Вы можете легко изменять их динамически. Если вы не хотите изменять его динамически, вы можете поместить хост, порт и все остальное в parameters.yml, где находится конфигурация почты.

Другие вопросы по теме