Error presenter a persistentní parametry

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

Ahoj.
Je správně, že Error presenter neakceptuje persistentní parametry? V BasePresenteru mám něco jako:

abstract class BasePresenter extends Nette\Application\UI\Presenter
{
	/** @persistent */
	public $foo = 'bar';

	public function beforeRender()
	{
		$this->flashMessage('foo: ' . $this->foo);
	}
}

Parametr foo z URL je ovšem ignorován, když zavolám nějakou 404 neexistující adresu.

Hodil by se mi znát i v takovémto případě (např. persistentní parametr lang, kvůli lokalizaci chybové hlášky).

PS: ErrorPresenter samozřejmě dědí od BasePresenteru.

Editoval hejdav (20. 11. 2014 13:08)

castamir
Člen | 629
+
+1
-

ErrorPresenter by IMHO neměl dědit od BasePresenteru. Co když budeš mít chybu v BasePresenteru?

hejdav
Člen | 50
+
0
-

I v sandboxu od něj dědí. Tak jako tak, persistentní parametry ignoruje…

Btw měl to zřejmě řešit tenhle commit, ale evidentně to nefungfuje …

castamir
Člen | 629
+
0
-

Zkusil jsem si stáhnout aktuální nette/sandbox a přidal následující kód pro vyvolání výjimky a vykreslení flashmsg viz tvůj kód v prvním příspěvku:

	// HomepagePresenter
public function actionDefault()
{
    $this->error();
}
	// BasePresenter
/** @persistent */
public $foo;

public function startup()
{
    parent::startup();
    if (!$this->foo) {
        $this->foo = 'bar';
    }
}

protected function beforeRender()
{
    $this->flashMessage('foo: ' . $this->foo);
}

A flash msg se vypíše (a to i když smažu úpravu startup metody).

Edit: nutno dodat, že persistentní parametr musí mít nějakou hodnotu, aby se ti vůbec mělo co vypsat =)

Editoval castamir (20. 11. 2014 16:39)

hejdav
Člen | 50
+
0
-

Hmm, tak to asi nefunguje jen v případě, když se nenaroutuje žádnej presenter.. ještě trochu proštuduju kudy to prolejzá skrz Nette.. jinak díky!

Editoval hejdav (20. 11. 2014 16:47)

castamir
Člen | 629
+
0
-

Pokud se ti spouští výchozí error presenter, tak ten nedědí od tvého BasePresenteru (nedědí od žádného presenteru)…

hejdav
Člen | 50
+
0
-

Tenhle sice nedědí. Ale dle xdebugu se opravdu spouští tenhle ErrorPresenter.

Editoval hejdav (20. 11. 2014 21:38)