Předání proměnných mezi funkcemi action a render v presenteru

vosy
Člen | 525
+
0
-

Ahoj, chtěl jsem se zeptat zda mohu nějak předávat proměnné mezi funkcí actionUpravit() a renderUpravit()

např:

	public function actionUpravit($id)
    {
        $id = intval($id);
        $email_info = $this->emailManager->getEmailById($id);

        if (!$email_info) {
            $this->redirectDoesntExistPage();
        }

....
...
	}

	public function renderUpravit($id)
    {
		$id = intval($id);
        $email_info = $this->emailManager->getEmailById($id);

		$this->template->email = $email_info['email'];
	}

ve fci ACTION chci zjistit zda email existuje a ve fci RENDER chci předávat proměnné do šablony.
Ale otázka zní jestli proměnou $email_info mohu nějak rozumně předat do fce RENDER abych nevolal znova DTB.

Případně jak byste to řešili nebo řešítě.

Dix

Editoval vosy (4. 12. 2022 21:02)

David Grudl
Nette Core | 8082
+
+2
-
class MyPresenter
{
	private $emailInfo;

	function actionUpravit()
	{
		$this->emailInfo = $this->emailManager->getEmailById($id);
	}

	function renderUpravit()
	{
		$this->template->email = $this->emailInfo['email'];
	}
}
dakur
Člen | 493
+
+1
-

actionUpravit a renderUpravit nejsou funkce, ale metody třídy (presenteru). Funkce nemají žádný kontext, kdežto metody mají kontext své třídy – mohou přistupovat k vlastnostem (properties) dané třídy. Pokud si tedy uložíš e-mail do takové property, můžeš k ní pak přistupovat v render metodě – jak píše David. Je to běžná praxe.

Editoval dakur (5. 12. 2022 10:12)