Ignorování výchozí hodnoty persistentního parametru potomka

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

Zdravím, je možné že si stejné chyby všimnul ještě někdo jiný, ala na fóru jsem nic nenašel.
Mám HomepagePresenter, který je potomkem BasePresenter. V HomepagePresenteru si nadefinuji persistentní parametr id.

<?php
class HomepagePresenter extends BasePresenter
{
	/** @persistent */
	$id = 1;
}

class BasePresenter extends Presenter
{
	protected function startup()
	{
		parent::startup();

		Debbuger::barDump($this->getParam('id'));
	}
}
?>

Pokud v URL nenastavím parametr id, zůstane mu logicky výchozí hodnota 1. Pokud ji ale zjišťuji v rodičovské třídě, vyhodí NULL protože nette do pole argumentů výchozí hodnotu persistentního parametru nenačte. Situace je jiná pokud id změním v URL na hodnotu 3. Potom mi je dumpnutá hodnota správná.

uestla
Backer | 799
+
0
-

Zjišťuješ-li (rozuměj „používáš-li“) persistentní proměnnou už v BasePresenteru, nevidím důvod, proč ji nemít už tam … ?

Vyki
Člen | 388
+
0
-

Já s tím persistentním parametrem potomka pracuji v přípdadě, když chci zjistit zda má uživatel právo pracovat s tímto id. Ten parametr se může pokaždé lišit svým názvem, to záleží na té třídě toho potomka. Mě to nikterak neomezuje, ale za chybu to považuji. Fixnul jsem to v BasePresenteru nějak takto:

public function checkPersistentParam($name)
{
    if(in_array($name, $this->getPersistentParams())){
         if(isset($this->params[$name]) === FALSE){
            $this->params[$name] = $this->{$name};
         }
         return TRUE;
    }
    return FALSE;
}

Editoval Vyki (18. 9. 2011 10:03)