2016-10-03 14 views
7

W moim usługi powiadamiania mam wysyłanie powiadomień pocztą, ale w dev Chcę wysłać całą wiadomość e-mail z konkretnym adresem:dostać getEnvironment() z usługi

if ($this->container->get('kernel')->getEnvironment() == "dev") { 

    mail('[email protected]', $lib, $txt, $entete); 

} else { 

    mail($to->getEmail(), $lib, $txt, $entete); 

} 

ale tylko $this->container->get('kernel')->getEnvironment() prace w kontrolerze.

Chyba muszę dodać argument w moim konstruktora usług:

notification: 
    class:  %project.notification.class% 
    arguments: [@templating, @doctrine] 

Ale nie znaleziono żadnych informacji o tym

Thx

Odpowiedz

16

Nie ma potrzeby, aby wstrzyknąć kontenera. W rzeczywistości nie jest dobrym pomysłem wstrzykiwanie pojemnika, ponieważ uzależniasz swoją klasę od DI.

Należy wstrzyknąć środowiskową parametr:

services.yml

notification: 
    class:  NotificationService 
    arguments: ["%kernel.environment%"] 

NotificationService.php

<?php 

private $env; 

public function __construct($env) 
{ 
    $this->env = $env; 
} 

public function mailStuff() 
{ 
    if ($this->env == "dev") { 
     mail('[email protected]', $lib, $txt, $entete); 
    } else { 
     mail($to->getEmail(), $lib, $txt, $entete); 
    } 
} 
+1

prawda, ale jak wynika z odpowiedzi powyżej, jest jeszcze prostsza: Symfony pochodzi z wbudowanym functionnality do wysyłania e-maili w konkretnym adresem, po prostu trzeba ustawić odpowiednią konfigurację w swoim 'app/config/config_dev.yml' w tym przypadku. Nie ma potrzeby zajmowania się tą logiką w twojej usłudze. – Boulzy

+0

Thx za najlepsze praktyki! Ale muszę zrobić ten sam proces z powiadomieniami o luzie (do wysłania tylko w prod) – Paul

2

Powodem można dostać $ to -> Kontener w kontrolerze jest spowodowany wtryskiem do kontrolera, który wysuwasz.

Na przykład można wstrzyknąć do pojemnika i ustawić go w swoim konstruktorze.

services.yml

notification: 
    class:  %project.notification.class% 
    arguments: [@templating, @doctrine] 

NotificationService.php

<?php 

private $container; 

public function __construct() 
{ 
    $this->container = $container; 
} 

public function mailStuff() 
{ 
    if ($this->container->get('kernel')->getEnvironment() == "dev") { 
     mail('[email protected]', $lib, $txt, $entete); 
    } else { 
     mail($to->getEmail(), $lib, $txt, $entete); 
    } 
} 

Wystarczy popatrzeć na dependency injection aby uzyskać więcej informacji.


UWAGA

Generalnie, wstrzykując w pojemniku jest złe i oznacza, że ​​nie ma lepszego sposobu, aby coś zrobić. W tym przypadku Symfony ma już rozwiązanie, które próbujemy rozwiązać.

Wprowadź SwiftMailer.

A w szczególności sekcja dotycząca wysyłania wszystkich dev emails to a set address.

Przeprowadź konfigurację Swiftmailera i dodaj poniższe do konfiguracji dev.

app/config/config_dev.yml

swiftmailer: 
    delivery_address: '[email protected]'