Cannot inject Templating on Symfony 4 Service

iamjc015 picture iamjc015 · Mar 18, 2018 · Viewed 14.8k times · Source

I have the following class:

EmailNotification

namespace App\Component\Notification\RealTimeNotification;

use Symfony\Bridge\Twig\TwigEngine;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

use App\Component\Notification\NotificationInterface;

class EmailNotification implements NotificationInterface
{   
    private $logNotification;

    public function __construct(LogNotification $logNotification, \Swift_Mailer $mailer,  EngineInterface $twigEngine)
    {
        $this->logNotification = $logNotification;
    }

    public function send(array $options): void
    {
        $this->logNotification->send($options);

        dump('Sent to email');
    }
}

I have the following service definition on my yml:

app.email_notification:
    class: App\Component\Notification\RealTimeNotification\EmailNotification
    decorates: app.log_notification
    decoration_inner_name: app.log_notification.inner
    arguments: ['@app.log_notification.inner', '@mailer', '@templating']

However, when i tried to run my app it throws an Exception saying:

Cannot autowire service "App\Component\Notification\RealTimeNotification\EmailNotification": argument "$twigEngine" of method "__construct()" has type "Symfony\Bundle\FrameworkBundle\Templating\EngineInterface" but this class was not found.

Why is that so?

Thanks!

Answer

Adrian Waler picture Adrian Waler · Jun 6, 2018

You have to install symfony/templating

composer require symfony/templating

change a little bit config/packages/framework.yaml

framework:
    templating:
        engines:
            - twig