proměnná $mailer pro celý presenter

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
simPod
Člen | 383
+
0
-

Definoval jsem si v presenteru ve startup() metode promennou maileru

<?php
function startup() {
        $mailer = new Nette\Mail\SmtpMailer(array(
                    'host' => 'smtp.gmail.com',
                    'username' => '...',
                    'password' => '...',
                    'secure' => 'ssl',
                ));
        parent::startup();
    }
?>

pak se na ni v jednotlivych funkcich snazim odkazat pomoci $this->mailer->send($mail); ale dostavam chybu Cannot read an undeclared property MyPresenter::$mailer.

Prosim o radu, diky

one-two
Člen | 80
+
0
-
class MyPresenter extends BasePresenter{

	protected $mailer;

	public function startup() {
		parent::startup();
        	$this->mailer = new Nette\Mail\SmtpMailer(array(
                    'host' => 'smtp.gmail.com',
                    'username' => '...',
                    'password' => '...',
                    'secure' => 'ssl',
                ));
    	}

}
ViPEr*CZ*
Člen | 813
+
0
-

Jen doplním, že ta původní proměnný mailer je pouze lokální pro metodu startup v BasePresenteru. Tudíž ji objekt this nemohl vidět. Jak to má one-two, tak již vidět je pro celou instanci a ne jen pro jednu metodu.

mkoubik
Člen | 728
+
0
-

Případně si to definovat jako službu v config.neon:

services:
  mailer:
    class: Nette\Mail\SmtpMailer
    arguments:
      host: smtp.gmail.com
      username: ...
      password: ...
      secure: ssl

A pak můžeš v libovolném presenteru volat $this->context->mailer.

Výhoda je, že můžeš mít různé nastavení pro localhost a produkci, snáz se to mockuje v testech atd.

simPod
Člen | 383
+
0
-

super, díky všem