2017-09-02 1 views
0

Qu'est-ce qui me manque?Symfony 3 SwiftMailer en tant que service

services.yml

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

ItemAddService classe

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"; 

} 
} 

Quand j'appelle itemCreateMailer() dans le contrôleur je reçois ce

« erreur de type: Argument 1 passé à AppBundle \ Services \ ItemAddService :: __ construct() doit être une instance de SwiftMailer, aucune donnée, appelée dans /home/admin-daniel/symfony-test-sites/july132017/src/AppBundle/Controller/DefaultController.php "

manque quelque chose ....

Répondre

-1

Essayez ceci dans services.yml

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

+0

Je l'ai fait ... et je viens de copier collé votre code et cela ne fonctionne toujours pas. Au début, je pensais que j'avais besoin d'une déclaration d'utilisation pour Swift, mais elle n'a pas besoin d'être utilisée comme argument. Je ne comprends pas. J'avoue que je suis nouveau à Symfony mais j'ai une compréhension très claire de PHP et je sens qu'il me manque quelque chose de petit ... comme cela se révèle généralement être le cas ... J'apprécie la réponse de monsieur ... – dlhines

0

Vous n'avez pas besoin parce que l'utilisation que vous utilisez « \ » avant le nom de la classe qui est signifie le nom complet de la classe. Jetez un coup d'oeil à mon fichier de services https://github.com/ismail1432/eniams-website/blob/master/app/config/services.yml. Après cela, dans votre contrôleur appelez le service via l'identifiant qui s'appelle app.send_mail mais vous le nommez comme vous voulez. Donc, dans le contrôleur faites ce $ this-> get ('app_send_mail') -> itemCreatedMailer();

+0

Okay. Cela fonctionne un peu. Maintenant je reçois ceci ... Erreur de type: L'argument 1 passé à Swift_Mailer :: newInstance() doit implémenter l'interface Swift_Transport, aucune donnée, appelée dans/home/admin-daniel/symfony-test-sites/july132017/src/AppBundle /Services/ItemAddService.php à la ligne 20 Je ne comprends pas pourquoi l'original ne fonctionne pas. Cela fonctionne dans tous les autres cas, je peux trouver "Swift_Mailer" dans les docs ... J'apprécie votre temps ... Ce cadre est complétement compliqué ... Comment puis-je implémenter le transport? – dlhines

+0

Désolé mais je ne comprends pas, maintenant quel est le problème? :-) –

+0

D'accord, comme l'indique l'erreur, que je ne suis pas l'implémentation d'une interface pour Swift_Transport. Tous les paramètres et paramètres de swift semblent être correctement définis dans mes fichiers de configuration et de configuration pour un, pw, et transport comme gmail ... si j'utilise cette même configuration de message dans un contrôleur, cela fonctionne sans problème ... Je ne sais pas ... – dlhines