No service of type Nette\Mail\Message found
- romiix.org
- Člen | 343
Zdravím,
v konfigurácií mám použité - setMail(@nette.mail)
.
Vzhľadom na to, že je metóda setMail
definovaná nasledovne:
public function setMail(\Nette\Mail\Message $mail)
{
$this->mail = $mail;
}
predpokladal by som, že stačí v konfigurácií napísať
- setMail
.
V takomto prípade ale dostanem
Nette\DI\ServiceCreationException
Service ‚registerForm‘: No service of type Nette\Mail\Message found.
Make sure the type hint in RegisterForm::setMail() is written correctly and
service of this type is registered.
To je bug, malo by to fungovať, nie?
Mám aktuálne Nette z GIT-u staré cca 2 hodiny.
- Filip Procházka
- Moderator | 4668
Není to bug. Lépe takto
public function setMailer(\Nette\Mail\IMailer $mailer)
{
$this->mailer = $mailer;
}
Následně pak
$message = new Nette\Mail\Message;
//...
$this->mailer->send($message);
- Ondřej Mirtes
- Člen | 1536
V aplikacích existují dva typy objektů – servisy a value objekty. Se servisami se dá pracovat v DI kontejneru (může je vytvářet a injektovat do dalších servis), value objekty vytváříš obvykle dynamicky v aplikaci.
Kvíz:
- Mailer je:
- Message je:
- romiix.org
- Člen | 343
enumag napsal(a):
Ne to zcela určitě není bug. Dokonce ti to i jasně říká v čem je problém – neexistuje služba typu Nette\Mail\Message. Takovou Nette opravdu nemá a ani nikdy nemělo.
Čeho se snažíš docílit?
Predpokladal som, že by to malo fungovať, pretože
v súbore/www/temp/cache/_Nette.Configurator/_-1fc326ceb08990b99a2ba83ac08c3af8.php
mám vygenerované:
/**
* @return Nette\Mail\Message
*/
public function createNette__mail()
{
$service = new Nette\Mail\Message;
$this->callInjects($service);
$service->setMailer($this->getService('nette.mailer'));
return $service;
}
Mojim cieľom bolo dodanie $container->nette->createMail()
komponente automaticky.
Presenter, createComponent…
$form->mail = $this->context->nette->createMail();
a v komponente…
$mail = $this->mail;
$mail->setFrom($address_from)
->addTo($address)
->setSubject($subject)
->setHTMLBody($template)
->send();
- Filip Procházka
- Moderator | 4668
Samozřejmě. Jenže ty potřebuješ tohle, nemůžeš totiž jen tak někam předat metodu (tedy můžeš, ale to je Nette magie z Nette\Object).