Odesílání emailu s využitím latte template z Orchestrace
- Mesiah
- Člen | 240
Zdravíčko,
snažím se odeslat email z Orchestrace (Fasady/Service vrstvy, chcete-li).
/**
* Prepare email for use after registration
* @param \Model\Orchestration\Model\Entity\User $user
* @return \Nette\Mail\Message
*/
public function afterRegistration(\Model\Entity\User $user) {
// Tady vygeneruji email pro nově zaregistrovaného uživatele
$template = new \Nette\Templating\FileTemplate(EMAIL_TEMPLATES . '/registration.latte');
$template->registerFilter(new \Nette\Latte\Engine());
$template->registerHelperLoader('\Nette\Templating\Helpers::loader');
$template->user = $user;
$mail = new \Nette\Mail\Message();
$mail->setFrom('Foo <hello@bar-baz.com>')
->addTo($user->email)
->setHtmlBody($template->render());
return $mail;
}
jenže dostávám chybu Notice Undefined variable: _control
problém je v tom, že používám v těle emailu makro link (když jej
odstraním, vše je ok), takže nejspíš je potřeba nějakým způsobem
předat FileTemplatingu i kolekci maker se kterými měl pracovat – jak na
to?
Nebo se pletu a chyba vzniká jinak?
Editoval Mesiah (24. 12. 2013 16:54)
- Mesiah
- Člen | 240
Mesiah napsal(a):
Ok, tak už vím, že problém je že nemám nastavený presenter pro šablony, což mi říká tenhle post.
Otázka ale stále zůstává, jak odesíláte emaily?
To jako fakt všichni sestavujete email v presenteru? :O
Jako ani předávat presenter třídě MailOrchestration skrz setter mi
nepříjde úplně košér a vytvářet uvnitř MailOrchestration DummyPresenter
jen abych mohl vytvářet email s odkazy taky ne…
Proč jej vlastně tady potřebuji? Tady by mi teoreticky stačil jen
router, ne?
- David Matějka
- Moderator | 6445
jo, jeden z (velkych) problemu v nette – linky se daji snadno vytvaret jen na presenteru/komponente
snadne reseni: injectni si application, z toho si vytahnes presenteru
slozite reseni (ale hezci): injectni si router, nekde si sezen referencni URL (v http modu url z http request, v cli si ji musis nejak vytvorit), vytvor si Nette\Application\Request a sestav si url
optimalizace predchoziho: vytvor si sluzbu (UrlGenerator treba), ktera bude linky vytvaret. muze to vypadat treba takhle (je to v podstate z metody presentercomponent v controlu – jen trochu osekany)
Editoval matej21 (25. 12. 2013 0:00)
- Mesiah
- Člen | 240
Díky za nápady!
Trošku mi vadí, že musím buď link sestavit v kódu nebo
registrovat(instalovat) nové makro, aby bylo možné jej sestavit v šabloně,
ale pořád je to lepší než mít odkaz natvrdo v template.
Prosím tě, ta služba na githubu je pod jakou licencí? V současnosti je to
pro mě just enough řešení a nechci mi mít pocit, že jsem to ukradl…
- David Matějka
- Moderator | 6445
novemu makru se muzes vyhnout, staci do sablony UrlGenerator poslat:
$template->urlGenerator = $this->urlGenerator;
a v sablone jen
<a href="{$urlGenerator->link('Homepage:default')}">
k licenci: jen jsem vypreparoval kus kodu z nette a udelal jsem z toho sluzbu. nevim, co by se tam v tomhle pripade melo psat za licenci.. jestli ti tam fakt chybi, tak ti tam muzu neco pripsat :)