Symfony2のコマンドクラスからtwigテンプレートをレンダリングする必要があります。
_namespace IT\bBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class CronCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('send:emails')
->setDescription('Envio programado de emails');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$message = \Swift_Message::newInstance()
->setSubject('bla bla')
->setFrom('[email protected]')
->setTo('[email protected]')
->setCharset('UTF-8')
->setContentType('text/html')
->setBody($this->renderView('mainBundle:Email:default.html.twig'));
$this->getContainer()->get('mailer')->send($message);
$output->writeln('Enviado!');
}
}
_
しかし、コマンド_php app/console send:emails
_を実行すると、次のエラーが発生します。
致命的なエラー:未定義のメソッドの呼び出し
IT\bBundle\Command\CronCommand::renderView()
ビューをレンダリングするにはどうすればよいですか?
それはrenderViewがクラスControllerのメソッドだからです。その代わりに:
$this->getContainer()->get('templating')->render(...);
変化する
$this->renderView()
に
$this->getContainer()->get('templating')->render()
たぶん、あなたが尋ねる質問とは異なりますが、確かに-重要です。
コマンドコールでメールを送信する場合は、flushQueueを実行する必要があることを忘れないでください。
$mailer = $container->get('mailer');
$spool = $mailer->getTransport()->getSpool();
$transport = $container->get('swiftmailer.transport.real');
$spool->flushQueue($transport);