2016-10-03 4 views
7

からGetEnvironment関数を()入手:私がメールで通知を送信する必要がありますが、dev内、私は特定のアドレスへのすべての電子メールを送信するサービス私の通知サービスで

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

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

} else { 

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

} 

しかし、唯一の$this->container->get('kernel')->getEnvironment()作品コントローラーで

私は私のサービスのコンストラクタに引数を追加する必要が思う:

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

しかし、私はこの

Thxを

答えて

16

コンテナを注入する必要はありません。実際には、クラスをDIに依存させているので、コンテナを挿入するのは良い考えではありません。

あなたは、環境パラメータを注入する必要があります

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

真が、上記の回答で述べたように、そこにも簡単です:symfonyは特定のアドレスに電子メールを送信するfunctionnalityに建てられた、あなただけの/あなたの 'アプリで右のコンフィギュレーションを設定する必要が付属していますこの場合config/config_dev.yml'を実行します。あなたのサービスでこのロジックを処理する必要はありません。ベストプラクティスのための – Boulzy

+0

Thx!しかし、私は、(prodでのみ送信される)スラック通知で同じプロセスを実行する必要があります – Paul

2

あなたは$これを得ることができた理由についての情報が見つかりませんでしたコントローラー内のコンテナは、コントローラーに挿入されているためです。

たとえば、コンテナに挿入してコンストラクタに設定することができます。

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); 
    } 
} 

services.ymlは、より多くの情報のためdependency injectionを見てください。


容器に注入することは悪いですし、何かを行うには良い方法があることを意味し、一般的に

に注意してください。この場合、Symfonyはすでに解決しようとしている解決策を持っています。

Enter SwiftMailer。

具体的には、すべてを送信するセクションはdev emails to a set addressです。

Swiftmailerをセットアップして、devの設定に次の行を追加してください。

アプリ/設定/ config_dev.yml

swiftmailer: 
    delivery_address: '[email protected]' 
関連する問題