Symfony 3.4: تغيير إعدادات بروتوكول نقل البريد الإلكتروني SwiftMailer

1

أنا جديد تمامًا على 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) ولماذا هو ضروري هنا ولكن ليس في المثال.

هل من أفكار لإصلاح ، أو طريق بحث مناسب ، أو حتى نهج بديل لما أحاول تحقيقه؟

2 الاجابة

0

ربما لا يمكن العثور عليه swiftmailer.transport.real .

حاول استخدام فقط @mailer وفي symfony 3.4 ، يمكنك استخدام حقن التبعية والتوصيل التلقائي فقط.

إذا كنت تريد تغيير المضيف والمنفذ ديناميكيًا ، يمكنك استخدام متغيرات البيئة الموجودة بالفعل في symfony 3.4. يمكنك بسهولة تغييرها ديناميكيًا. إذا كنت لا تريد تغييره ديناميكيًا ، يمكنك وضع المضيف والمنفذ وكل شيء آخر في parameters.yml أين هو تكوين البريد.

:مؤلف
0

إذا كنت تحدد خدمتك في ملف service.yml ضمن مجلد الحزمة الخاصة بك ، فحاول نقلها إلى ملف الخدمات الرئيسي "app / config / services.yml" ، انظر هذا الرابط

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام