Šablona e-mailu nebere a href

Jack.q
Člen | 54
+
0
-

Zdravím Vás,
mám takový menší problém, po úspěšném dořešení předchozího tématu nelze načíst presenter mám zde další problém, a to konkrétně ten, že v šabloně mailu, nefunguje aktivační odkaz, přitom podle příspěvku zde na fóru to tak skutečně má být. Odkaz v latte šabloně mailu je takovýto:

Šablona: Kde je umístěn odkaz

<a href="{link //Homepage:verify, $token}">Potvrďte Váš účet</a>

AccountPresenter: Funkce pro to aby fungovalo makro

protected function createTemplate() {
    $template = $this->templateFactory->createTemplate();
    $template->getLatte()->addProvider('uiControl', $this->linkGenerator);
    return $this->getTemplateFactory()->createTemplate($this);
}
Jan Endel
Člen | 1016
+
0
-

Ahoj! Co se tam vygeneruje místo odkazu?

Ondřej Kubíček
Člen | 494
+
0
-

podle mě to máš celé zbytečné složitě
nejjednoduší by bylo, kdybys měl službu, která by posílala emaily, zjednoduše mám to nějak takto:

class EmailService
{
    public function __construct(Nette\Bridges\ApplicationLatte\ILatteFactory $latteFactory, Nette\Application\LinkGenerator $linkGenerator)
	{
        $this->latteFactory = $latteFactory;
        $this->linkGenerator = $linkGenerator;
    }

	private function prepareEmail()
	{
		$mail = new Nette\Mail\Message;

		$latte = $this->latteFactory->create();
		Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
		$latte->addProvider('uiControl', $this->linkGenerator);
		$template = $latte->renderToString(__DIR__ . "/templates/email.latte");

		$mail->setHtmlBody($template);

		return $mail;
	}
}

v té prepareEmail si jen přidám ten uiControl pak můžu jednoduše používat {link} makro, nemusíš na začátek ani dávat //, linkGenerator generuje ty url absolutní už přímo

a máš to oddělené od presenteru, nepřepisuješ si žádné createTemplate a funguje to hlavně

Jack.q
Člen | 54
+
0
-

@JanEndel
Vygeneroválo to odkaz <a href=„#“>Potvrďte Váš účet</a>
@OndřejKubíček
Zatím moc netuším jak se přes služby odesílat mail, proto mám v presenteru tento zápis:

public function actionOdesliAktivacniEmail($email) {
   $latte = $this->account->create($email);
   Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());
   $latte->addProvider('uiControl', $this->linkGenerator);
   $template = $latte->renderToString(__DIR__ . "/templates/email.latte");

   $mail = new Message();
   $mail ->addTo($email)
         ->setFrom('info@tld.com')
         ->setSubject('Potvrďte svůj účet')
         ->setHtmlBody($template);
   $mailer = new SendmailMailer;
   $mailer->send($mail);
   $this->flashMessage('Aktivační email byl odeslán', 'info');
   $this->redirect('send');
}

Bohužel píše mi to:

Call to a member function getCompiler() on integer

Editoval Jack.q (28. 2. 2018 10:03)

nightfish
Člen | 472
+
0
-

Jack.q napsal(a):

$latte = $this->account->create($email);
Nette\Bridges\ApplicationLatte\UIMacros::install($latte->getCompiler());

Bohužel píše mi to: Call to a member function getCompiler() on integer

Funkce create() ti vrací integer místo instance Latte\Engine(). Proč to tak je zjistíš ve funkci create().

Mimochodem četl jsi článek https://phpfashion.com/…lech-a-nette? Tam je pěkně popsané posílání e-mailů pomocí k tomu vytvořené služby.