SwiftMailerBundle addPart не найден

Глядя в документацию swiftmailer, чтобы включить оба формата сообщения в текст в формате HTML, вам нужно использовать метод addPart: swiftmailer doc

// Give it a body
->setBody('Here is the message itself')

// And optionally an alternative body
->addPart('<q>Here is the message itself</q>', 'text/html')

Но, к моему удивлению, этот метод не найден Symfony2, и я не знаю, как решить мою проблему.

Любая идея?

2 ответа

Решение

Это то, что я использую, и для меня это работает:

$message = \Swift_Message::newInstance()
                ->setSubject($subject)
                ->setFrom($from)
                ->setTo($emailAddress)
                ->setBody(
                    $this->templating->render(
                        $template.'.txt.twig',
                        $parameterArray
                    )
                )
                ->addPart(
                    $this->templating->render(
                        $template.'.html.twig',
                        $parameterArray
                    ),'text/html'
                );

Если вы получаете это Method 'addpart' not found in \Swift_Mime_MimePart сообщение в IDE, в моем случае PHP Storm, то я обнаружил, что мне пришлось повторно объявить $message переменная как \Swift_Message объект.

В среде IDE используется тип возвращаемого значения родительского класса. Swift_Mime_MimePart как он использует родительский метод, и поэтому он не принимает дочерний метод в дочернем классе Swift_Message,

Не очень аккуратно, так как нарушает цепочку методов, но устраняет ошибки анализа:

$message = \Swift_Message::newInstance()
    ->setSubject('Hello Email')
    ->setFrom('send@example.com')
    ->setTo('recipient@example.com')
    ->setBody(
        $this->renderView(
            // app/Resources/views/Emails/registration.html.twig
            'Emails/registration.html.twig',
            array('name' => $name)
        ),
        'text/html'
    )
;
/* @var \Swift_Message $message */
$message
    ->addPart(
        $this->renderView(
            'Emails/registration.txt.twig',
            array('name' => $name)
        ),
        'text/plain'
    )
;
$this->get('mailer')->send($message);
Другие вопросы по тегам