Ako poslať z userManagera konfirmačný email
- Čamo
- Člen | 798
Zdravím,
prosím vás ako mám vyriešiť takúto vec:
- Z registračného formu dostanem meno, email, heslo, role
- Pošlem to na App\Model\UserManager::add($params, $presenter/vysvetlím/)
- V metóde add() otvorým transakciu pretože sa vkladá do viacerých tabuliek.
- Kôli tej transakcii to musím commitnúť. A kôl tomu commitu pridávam k tomu celému aj odoslanie emailu. Nekameňujte ma aj tak to nefunguje. Inak si totiž neviem predstaviť, ako by som urobil rollback ak by odoslanie emailu v presentery zlyhalo.
- Volanie createTemplate vyvolá chybu „Call to undefined method App\Model\UserManager::createTemplate().“
Dúfam, že chápete. Snažil som sa byť stručný. Ak nie vysvetlím.
Editoval Čamo (11. 3. 2015 23:25)
- bazo
- Člen | 620
no a odkial by ten UserManager mal vediet co je metoda createTemplate? definoval si mu ju? odhlianuc od toho, ze je to blbost. posielanie mailov by si mal delegovat na iny objekt, nejaky Mailer, ktory bude mat latte a tam si mozes vytvarat templaty.
a este ked to prepojis cez eventy tak to bude zuzo
- echo
- Člen | 134
Ta metoda je protected: https://api.nette.org/…esenter.html#…
šup dostudovat základy php
- Michal Vyšinský
- Člen | 608
Proč vytváříš šablonu přes presenter? Injectni si LatteFactory a vytvoř šablonu jednoduše přes ni. Jak na to sepsal hezky David
Editoval Michal Vyšinský (12. 3. 2015 11:23)
- studna
- Člen | 181
Udělej si samostatně službu na odesílání e-mailů. Zkusím to letmo nastínit..
class Postman extends Nette\Object {
private $mailer;
private $dir;
function __construct($dir, IMailer $mailer) {
$this->mailer = $mailer;
$this->dir = $dir;
}
public function getSubscribedEvents() {
return [
'App\Model\UserManager::onRegister' => 'onRegister'
]
}
public function onRegister(User $user, ActivationToken $token) {
$message = new Message();
// ..
$html = $this->getHtmlString('onRegister.latte', [
'user' => $user,
'token' => $token
]);
$message->setHtmlBody($html);
$this->mailer->send($message);
}
private function getHtmlString($name, $params = []) {
$filename = $this->dir . DIRECTORY_SEPARATOR . $name;
$latte = new Latte\Engine();
return $latte->renderToString($filename, $params);
}
}
Pokud používáš Kdyby\Events
, tak stačí, když této
službě přidáš tag kdyby.subscriber
v configu. A samozřejmě
do UserManager doplníš něco jako:
class UserManager extends Nette\Object {
public $onRegister = [];
public function register($params) {
// $user = zpracujes data a vlozis uzivatele
// $activationToken = vytvoris uzivateli aktivacni token
$this->onRegister($user, $activationToken);
}
}
Pokud bys potřeboval vytvářet odkazy, přečti si https://phpfashion.com/…-a-nette-2-3.
- Michal Vyšinský
- Člen | 608
Čamo napsal(a):
Ten článok vidím prvý krát, tak si ho idem prečítať.
Ale dovolím si jednu hnidopišskú otázku. Ako by sa to riešilo, vo verzii 2.0?
upgradem na 2.3 :)
Editoval Michal Vyšinský (12. 3. 2015 11:30)
- studna
- Člen | 181
Pokud nechceš používat eventy, tak si tuto službu prostě předáš do UserManager (skrz konstruktor) a upravíš metodu add():
$this->postman->onRegister(..); // namísto $this->onRegister(...)
A ano, toto je sekce začátečníci, ale když používáš Nette framework, tak se jaksi očekává, že zvládáš alespoň základy OOP.
Zkus popsat, co přesně je pro tebe složité. A nebo jaké řešení si představuješ?
- Čamo
- Člen | 798
Ako súvisí systém injektovania, systém šablon + vytvárania odkazov
v šablonách … a eventy v Nette s oop? Možno v tom mám chaos, ale
pokiaľ čítam dobre v tom článku od DG tak chaos to je aj bezo mňa a
oop.
Je to trochu trápne ako sa ma snažíte za každú cenu zhodiť nie?
Editoval Čamo (12. 3. 2015 12:26)
- Čamo
- Člen | 798
Už netrepte. Je tu kopa vláken, kde sa riešia úplne rovnaké otázky o ktorých by sa dalo povedať, že sú to základy php. Ale nechcem nikoho zhadzovať, tak s tým prestaňte, kým sa do toho nepustím. Každý je len človek a kto sa tvári že je viac má nejaký problém v hlave.
Editoval Čamo (12. 3. 2015 12:59)