Подтвердить что ты не робот

Отправить письмо от командной строки в symfony2

Мне нужно отобразить шаблон ветки из класса команд в symfony2.

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, я получаю следующую ошибку:

Неустранимая ошибка: вызов метода undefined IT\bBundle\Command\CronCommand::renderView()

Как визуализировать представление?

4b9b3361

Ответ 1

Это потому, что renderView - это метод класса Controller. Вместо этого попробуйте:

$this->getContainer()->get('templating')->render(...);

Ответ 2

Измените

$this->renderView()

к

$this->getContainer()->get('templating')->render()

Ответ 3

Возможно, не совсем вопрос, который вы задаете, но наверняка - важно.

Пожалуйста, помните, что если вы хотите отправлять электронные письма с помощью командного вызова, вам нужно выполнить команду flushQueue.

$mailer = $container->get('mailer');
$spool = $mailer->getTransport()->getSpool();
$transport = $container->get('swiftmailer.transport.real');
$spool->flushQueue($transport);