Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift mail from Symfony Command

I try to send a Swift mail from the commandline using a Symfony command. Though I get the following exception.

Fatal error: Call to undefined method Symfony\Bundle\TwigBundle\Debug\TimedTwigE
ngine::renderView() in ...

A container is added to this class which I got from the command that is made ContainerAwareCommand

The code of the function lookslike this:

private function sendViaEmail($content) {
    $message = \Swift_Message::newInstance()
            ->setSubject('Hello Email')
            ->setFrom('[email protected]')
            ->setTo('[email protected]')
            ->setBody(
            $this->container->get('templating')->renderView(
                    'BatchingBundle:Default:email.html.twig', array('content' => $content)
            )
    );
    $this->get('mailer')->send($message);
}

Update The line where the exception happens is $this->container->get('templating')->renderView(

As you can see in the code the last line would probably fail aswell as it finally gets there.

like image 925
Roel Veldhuizen Avatar asked Sep 19 '13 13:09

Roel Veldhuizen


1 Answers

As the error message said, there is no renderView method in the TwigEngine. renderView() is a shortcut in the symfony base controller class:

namespace Symfony\Bundle\FrameworkBundle\Controller

class Controller extends ContainerAware
{
    /**
     * Returns a rendered view.
     *
     * @param string $view       The view name
     * @param array  $parameters An array of parameters to pass to the view
     *
     * @return string The rendered view
     */
    public function renderView($view, array $parameters = array())
    {
        return $this->container->get('templating')->render($view, $parameters);
    }
}

There you can see the correct method to render a view with the templating service.

$this->container->get('templating')->render(
    'BatchingBundle:Default:email.html.twig', array('content' => $content)
)
like image 177
Emii Khaos Avatar answered Oct 23 '22 18:10

Emii Khaos