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)