Odkazy v sabone Nette\Mail
- martincohen
- Člen | 14
Cau kuci,
pokusam sa prist na najlepsi sposob ako do mailu vkladat odkazy veduce niekam do Nette aplikacie. Idealne s vyuzitim Nette routera, aby s tym nebol prilis velky oser.
Mejly neodosielam z presenteru, ale zo samostatnej triedy (IssueMailer), ktora pocuva na zmeny v IssueModel. Triedu mam napisanu tak, ze mail prida do fronty (db) a odosle sa az neskor (cron job), aby sa aplikacia nezdrzovala.
Najvasci problem je ale mat moznost generovat v sablonach mejlov odkazy cez {link …} makro. Kedze sa maily odosielaju neskor, a uz mimo Nette ci Apache kontextu, tak sablonu mejlu vygenerujem este v Nette. Zatial som sa dostal niekde sem:
// Vezmem si aktualny presenter. Je mi jedno aky presenter to presne je.
$presenter = \Nette\Environment::getApplication()->getPresenter();
// Kedze je $presenter->createTemplate() protected, tak si mejl vytvorim sam
$template = new \Nette\Templates\Template( __DIR__.'/mail/'.$template.'.phtml' );
// Kus kodu z $presenter->createTemplate()
$template->control = $presenter;
$template->presenter = $presenter;
$template->baseUri = Nette\Environment::getVariable('baseUri');
$template->basePath = rtrim($template->baseUri, '/');
$template->registerFilter( new \Nette\Templates\LatteFilter );
$mail->setHtmlBody( $template );
Toto funguje, ale nie som si celkom isty ci je to ta spravna cesta, zvlast ak by sa zmeny na modeloch robili mimo Nette aplikaciu (typicky nejake migracne skripty). Za spravne riesenie by som povazoval nejaku samostatnu triedu, ktorej predam akurat Router a ona bude schopna generovat odkazy aj mimo Nette ci Apache i za cenu ze tam budu nejake obmedzenia.
Ako to riesite vy? Co si o tom myslite?