web-dev-qa-db-ja.com

Symfony 4サービスでテンプレートを挿入できません

次のクラスがあります。

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');
    }
}

私の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']

ただし、アプリを実行しようとすると、例外がスローされます:

サービス「App\Component\Notification\RealTimeNotification\EmailNotification」を自動配線できません。メソッド「__construct()」の引数「$ twigEngine」のタイプは「Symfony\Bundle\FrameworkBundle\Templating\EngineInterface」ですが、このクラスは見つかりませんでした。

どうしてこんなことに?

ありがとう!

10
iamjc015

ほとんどの場合、プロジェクトにテンプレートが含まれていないため、Symfony 4ではテンプレートを明示的に要求する必要があります。

composer require symfony/templating
6
MakG

Symfony/templatingをインストールする必要があります

composer require symfony/templating

config/packages/framework.yamlを少し変更します

framework:
    templating:
        engines:
            - twig
28
Adrian Waler

Twig Environment and HTTP Responseでなんとかできました

<?php

namespace App\Controller;

use Twig\Environment;
use Symfony\Component\HttpFoundation\Response;

class MyClass
{
    private $twig;

    public function __construct(Environment $twig)
    {
        $this->twig = $twig;
    }

    public function renderTemplateAction($msg)
    {
        return new Response($this->twig->render('myTemplate.html.twig'));
    }
}
8
Macr1408