Symfony 3 SwiftMailer как услуга

Что мне не хватает?

services.yml

AppBundle\Services\ItemAddService:
   arguments: ['@mailer']

Класс ItemAddService

namespace AppBundle\Services;

class ItemAddService{

private $mymailer;

public function __construct(\Swift_Mailer $mailer){

    $this->mymailer = $mailer;

}

public function itemCreatedMailer(){

    $message = (new \Swift_Message('Hello Email'))
        ->setFrom('[email protected]')
        ->setTo('[email protected]')
        ->setBody("Successfully got SwiftMailer to mail from Symfony3");

    $this->mymailer->send($message);

    return "Check mail";

}
}

Когда я вызываю itemCreateMailer() в контроллере, я получаю это

«Ошибка типа: Аргумент 1, переданный в AppBundle\Services\ItemAddService::__construct(), должен быть экземпляром SwiftMailer, не задан, вызван в /home/admin-daniel/symfony-test-sites/july132017/src/AppBundle/Controller /DefaultController.php"

Чего-то не хватает....


person dlhines    schedule 02.09.2017    source источник


Ответы (2)


Вам не нужно использовать, потому что вы используете «\» перед именем класса, что означает полное имя класса. Посмотрите файл моих сервисов https://github.com/ismail1432/eniams-website/blob/master/app/config/services.yml . После этого в вашем контроллере вызовите службу через идентификатор, который является app.send_mail, но вы называете его по своему усмотрению. Итак, в контроллере сделайте следующее: $this->get('app_send_mail')->itemCreatedMailer();

person Smaïne    schedule 04.09.2017
comment
Хорошо. Это вроде работает. Теперь я получаю это... Ошибка типа: аргумент 1, переданный в Swift_Mailer::newInstance(), должен реализовывать интерфейс Swift_Transport, не указан, вызывается в /home/admin-daniel/symfony-test-sites/july132017/src/AppBundle/Services /ItemAddService.php в строке 20 Не понимаю, почему оригинал не работает. Это работает в любом другом случае, который я могу найти Swift_Mailer в документации... Я ценю ваше время... Эта структура исчерпывающе запутана... Как мне реализовать транспорт? - person dlhines; 04.09.2017
comment
Извините, но я не понимаю, что не так? :-) - person Smaïne; 04.09.2017
comment
Хорошо, как указано в ошибке, я не реализую интерфейс для Swift_Transport. Все параметры и настройки для swift кажутся правильно определенными в моих файлах конфигурации и параметров для un, pw и транспорта как gmail... если я использую ту же самую настройку сообщений в контроллере, она работает без сучка и задоринки... я не не знаю... - person dlhines; 04.09.2017
comment
Эй, я ценю твое время. Я просто вынул экземпляр и запустил прямой вызов, и это сработало. Возможно, это неверно, но я очень ценю вашу помощь в понимании названий сервисов. Это было одно из моих следующих приключений, и вы в значительной степени прояснили это. Спасибо еще раз! - person dlhines; 04.09.2017
comment
Не беспокойтесь :-) Сначала Symfony кажется очень сложным, но это не так! Если вам помогли, не забудьте проголосовать, мой друг. - person Smaïne; 04.09.2017

Попробуйте это в services.yml

AppBundle\Services\ItemAddService: arguments: $mailer: '@mailer'

person Smaïne    schedule 04.09.2017
comment
Я сделал ... и я просто скопировал ваш код, и он все еще не работает. Сначала я думал, что мне нужен оператор использования для Swift, но он не нужен, так как передается аргумент. Я не понимаю. Я признаю, что я новичок в Symfony, но у меня очень четкое понимание PHP, и я чувствую, что упускаю что-то маленькое... как это обычно и бывает... Я ценю ответ, сэр... - person dlhines; 04.09.2017