Question

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('123@gmail.com')
            ->setTo('123@gmail.com')
            ->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.

Was it helpful?

Solution

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)
)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top