2016-08-11 5 views
4

私はSymfony Sonataバンドルで注文を作成するとすぐに特定の人に電子メールを送信しようとします。電子メールが送信される人物は、ユーザーが注文を承認するために選択した人物です。Symfonyで電子メールサービスを作成

私はservice container documentation on Symfony's websiteに従うことを試みますが、それは私にとってはあまりにも不完全であると感じています。私は、いくつかのスニペットだけでなく、完全な例を見たいと思います。

これまでのメールサービスクラスです。

<?php 

namespace Qi\Bss\BaseBundle\Lib\PurchaseModule; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker; 
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; 
use Doctrine\ORM\EntityManager; 

/** 
* 
*/ 
class Notifier 
{ 
    /** 
    * Service container 
    * @var type 
    */ 
    private $serviceContainer; 


    public function notifier($subject, $from, $to, $body) { 
     $message = \Swift_Message::newInstance() 
      ->setSubject($subject) 
      ->setFrom($from) 
      ->setTo($to) 
      ->setBody($body) 
     ; 
     $this->serviceContainer->get('mailer')->send($message); 
    } 

    /** 
    * Sets the sales order exporter object 
    * @param type $serviceContainer 
    */ 
    public function setServiceContainer($serviceContainer) 
    { 
     $this->serviceContainer = $serviceContainer; 
    } 
} 

私services.ymlファイル内の私のサービスはこのようになります。

bss.pmod.order_notifier: 
    class: Qi\Bss\BaseBundle\Lib\PurchaseModule\Notifier 
    arguments: ["@mailer"] 

そして、私はコントローラのアクションでサービスを呼び出すときに、私はこの行を使用します。

$this->get('bss.pmod.order_notifier')->notifier(); 

私は状態を取得していますエラー。

お知らせ:未定義のプロパティ: チー\はBss \ FrontendBundle \コントローラ\ PmodOrderController :: $ serviceContainer

私はservice container documentation見てきたが、私は理解できない、前に言ったようにそれ。

誰かがすべてを説明してくれる素敵な完全な例を教えてくれますか?

答えて

3

あなたが最初の引数として__construct受け入れてメーラを持たなければならない代わりに、それを、あなたのサービス・クラスでsetServiceContainer方法を必要としません:

class Notifier 
{ 
    protected $mailer; 

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

    public function notifier() { 
     $message = \Swift_Message::newInstance() 
      ->setSubject('Simon Koning') 
      ->setFrom('[email protected]') 
      ->setTo('[email protected]') 
      ->setBody('The quick brown fox jumps over the lazy dog.') 
     ; 
     $this->mailer->send($message); 
    } 
} 
+0

はありがとうございました!今、私は最終的にドキュメントで何が起こっているかを見ています。私がいつも見ることができない馬鹿なもの、そしてその後、私はとても馬鹿だ。ありがとう! –

+2

この手順をパスしたので、次の段階でイベントリスナーを作成し、注文が作成されるたびにコントローラにイベントを送信させることができます。リスナーは電子メールを送信するだけでなく、注文が作成されたときに実行する必要があるその他の作業を行うこともできます。これにより、コントローラが簡素化され、ビジネスロジックを分離するのに役立ちます。もちろん必須ではありませんが、考えられるものは – Cerad

+1

です。これでコンストラクタに別の依存関係を追加することができます。 '@ templating'は' HTML'メールを送信できます。 –

関連する問題