我正在從 Symfony 上的偵聽器發送郵件(Swift 郵件程序),只有在使用 renderView 時出現錯誤(也嘗試使用 render)...未定義的方法“renderView”。這是我的聽眾:<?phpnamespace App\Events;use ApiPlatform\Core\EventListener\EventPriorities;use App\Entity\User;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpKernel\Event\ViewEvent;use Symfony\Component\HttpKernel\KernelEvents;class UserSubscriber implements EventSubscriberInterface { private $mailer; public function __construct(\Swift_Mailer $mailer) { $this->mailer = $mailer; } public static function getSubscribedEvents() { return [ KernelEvents::VIEW => ['sendMail', EventPriorities::POST_VALIDATE], ]; } public function sendMail(ViewEvent $event): void { $user = $event->getControllerResult(); $method = $event->getRequest()->getMethod(); if (!$user instanceof User || Request::METHOD_POST !== $method) { return; } $message = (new \Swift_Message('A new book has been added')) ->setFrom('[email protected]') ->setTo('[email protected]') ->setBody( $this->renderView( // templates/emails/registration.html.twig 'emails/registration.html.twig', ['userPseudo' => $user->getPseudo()] ), 'text/html' ); $this->mailer->send($message); }}我知道模板服務在偵聽器中不可用,但我不明白如何注入它。
1 回答

小唯快跑啊
TA貢獻1863條經驗 獲得超2個贊
依賴注入 - 了解它
你需要將 Twig 傳遞給這個類(就像你對 Swift Mailer 所做的那樣)
一開始:
use Twig\Environment;
class UserSubscriber implements EventSubscriberInterface {
private $mailer;
private $twig;
public function __construct(\Swift_Mailer $mailer, Environment $environment)
{
$this->mailer = $mailer;
$this->twig = $environment;
}
并在代碼中(在方法中)以這種方式使用它:
$this->twig->render()
不是
$this->renderView()
- 1 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消