Posílání mailů se šablonou a odkazy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jarda256
Člen | 130
+
0
-

Ahoj, měl bych takový problém. Udělal jsem si třídu na posílání mailů, která dostane Message, šablonu a parametry. Ale když mám v šabloně link {link :ConfirmPerson $variables[token]} tak dostanu chybu Presenter name must be alphanumeric string, ':ConfirmPerson' is invalid.

mail trida

<?php
namespace App;

use Nette\Application\LinkGenerator;
use Nette\Bridges\ApplicationLatte\ILatteFactory;
use Nette\Bridges\ApplicationLatte\UIMacros;
use Nette\Mail\Message;
use Nette\Mail\SendmailMailer;
use Simplement\Bridges\DoctrineORM\MailQueue;
use Simplement\MailQueue\Mailer;
use Kdyby\Doctrine\EntityManager;

class MailSender
{

    /** @var Mailer */
    protected  $mailer;

    /** @var EntityManager */
    protected  $em;

    /** @var LinkGenerator */
    private $linkGenerator;

    /** @var ILatteFactory @inject */
    private $latteFactory;

    function __construct(EntityManager $em, LinkGenerator $lg,ILatteFactory $latteFactory)
    {
        $this->em = $em;
        $this->linkGenerator = $lg;
        $this->latteFactory = $latteFactory;
        $this->mailer = new Mailer(new SendmailMailer(),new MailQueue($this->em));
    }

    function sendEmail(Message $message,$template,$variables)
    {
        $latte = $this->latteFactory->create();

        UIMacros::install($latte->getCompiler());
        $latte->addProvider("uiControl", $this->linkGenerator);
        $html = $latte->renderToString(__DIR__ .'/'. $template, [
            'variables' => $variables
        ]);
        $message->setHtmlBody($html);


        $this->mailer->send($message, $priority = 1, $useQueue = TRUE);
    }
}
CZechBoY
Člen | 3608
+
+1
-

Pokud nemáš nastavený presenter tak všechny odkazy jsou absolutní, takže nepiš : na začátku odkazu.
btw. lepší je používat ITemplateFactory a IMailer.

jarda256
Člen | 130
+
0
-

@CZechBoY ITemplateFactory jsem zkousel, ale nejak se mi to nedarilo…IMailer pouzivam…tohle je obal od pluginu pro mailovou frontu

CZechBoY
Člen | 3608
+
0
-

@jarda256 Na to bych si udelal klasicky moji tridu implementujici ten interface… Budes chtit dalsi notifikace a zas budes vytvaret instanci maileru takhle skryte?

Uz ses teda dopatral k funkcnimu vysledku?

jarda256
Člen | 130
+
0
-

@CZechBoY Upravil jsem ten odkaz a už mi to funguje. Když budu mít čas, tak ještě pořeším jiné obalení. Ale teď jsem schopen takhle fungovat.