Call to a member function send() on a non-object
- oskarmaniak
- Člen | 29
Zdravím,
potřeboval bych poradit kde dělám chybu při práci s odesíláním
emailu.
Pokud si v presenteru například do action dám
<?php
private $mailer;
public function injectMailer(Nette\Mail\IMailer $mailer)
{
$this->mailer = $mailer;
}
public function actionEmail() {
$template = new Nette\Templating\FileTemplate('app/templates/emails/empty.latte');
$template->registerFilter(new Nette\Latte\Engine);
$template->registerHelperLoader('Nette\Templating\Helpers::loader');
$mail = new Message;
$mail->setFrom('example@example.com', 'example.com');
$mail->addTo("example@example.com");
$mail->setSubject('Test emailu');
$mail->setHtmlBody($template);
$this->mailer->send($mail);
$this->flashMessage('Check email');
}
?>
všechno funguje, pokud si ale chci na odesílání vytvořit componentu,
nebo udělat službu začně to hlásit chybu:
Call to a member function send() on a non-object
Když jsem si do var_dump dal $mail zjistil jsem že nedostává informace z šablony a proto není zřejmě objekt aby bylo co odesláno. Přitom podobně jsem to viděl řešené v jiné aplikaci a tam to fungovalo, takže je pravděpodobné že něco důležitého opomíjím.
A componenta či služba by měla být správně, jelikož pokud použiji čísté php mail() bez šablony tak se zprávy odesílají.
Za případné popostrčení kam dál budu velice vděčen.
- Jiří Nápravník
- Člen | 710
Problém pravděpodobně bude v tom, že se ti nenjectne ve službě/komponentě IMailer, pokud to děláš takto:
public function injectMailer(Nette\Mail\IMailer $mailer)
{
$this->mailer = $mailer;
}
to funguje automaticky jenom v presenteru. Jinde je doporučenou metodou injectovat tyhle věci v konstruktoru. Případně jestli chceš mít tyhle inject* metody i u služeb apod. tak musíš v neonu nastavit autowired: true tuším
- David Matějka
- Moderator | 6445
zavislosti sluzeb/komponent je nejlepsi dostavat pres konstruktor. Pokud
chces pouzit inject metody, musis u definice sluzby v neonu toto zapnout
pomoci inject: true
viz http://nette.matej21.cz/di.pdf
Editoval matej21 (10. 3. 2014 23:26)
- oskarmaniak
- Člen | 29
Díky moc za rady,
nakonec opravdu stačilo to dát do konstruktoru viz krásně zpracovaný PDF od
matej21.
Ještě jednou děkuji za nové zkušenosti.