あなたのサービスには、特にメーラー サービスなどの外部依存関係があります。サービス コンテナ自体を注入するか、メーラー サービスを注入することができます。
サービスがメーラー サービスのみを必要とし、他に何も必要としない場合は、メーラー サービスのみを挿入することをお勧めします。
セッターを使用してメーラー サービスを挿入するように DIC を構成する方法は次のとおりです。
<service id="my.service" class="Acme\DemoBundle\Service\Hello">
<call method="setMailer">
<argument type="service" id="mailer" />
</call>
</service>
クラス内で、セッターを次のように記述します。
class Hello
{
protected $mailer;
public function setMailer($mailer)
{
$this->mailer = $mailer;
}
public function sendEmail()
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('send@example.com')
->setTo('recipient@example.com')
->setBody($this->renderView('HelloBundle:Hello:email.txt.twig', array('name' => $name)))
;
$this->mailer->send($message);
}
}
注: コントローラー内でテンプレートをレンダリングしてこのメール関数に渡すか、テンプレート サービスを挿入してサービス内でレンダリングする必要があります。