Problém s metodou startup v basepresenteru

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

Ahoj, mám asi úplně blbej dotaz, ale nějak si s tím nevím rady. Zkouším si hrát s nette a vyrábím si takovou miniaplikaci tím, že upravuju kód ukázkové aplikace Dashboard. Původní příklad obsahoval jen jeden presenter a tak se ověření, zda je uživatel přihlášen, dělalo v něm. Moje aplikace obsahuje presenterů víc a tak jsem chtěl přesunout kód na ověření přihlášení uživatele přesunout do basePresenteru, abych ho nemusel opakovat v každém presenteru znovu.
Tak jsem v basepresenteru vytvořil funkci startup a přesunul do ní kód pro ověření uživatele z původní funkce startup. Výsledek vypadá takhle:

abstract class BasePresenter extends Presenter {
   protected function startup() {
	// user authentication
	}
}

class TypyPresenter extends BasePresenter
{
   protected function startup()	{
	parent::startup();
	//nejaky kod
	}

A laděnka mi teď hlásí tohle: Method TypyPresenter::startup() or its descendant doesn't call parent::startup(). Chápu. co mi to hlásí, ale nechápu proč. Jak to mám upravit, aby to fungovalo?

Newbiek
Člen | 12
+
0
-

Řekl bych, že BasePresenter by měl vypadat tedy takto.

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

I v BasePresenteru musíš zavolat parent::startup();

Editoval Newbiek (28. 7. 2011 21:44)

edmund
Člen | 28
+
0
-

Díky, bylo to ono. A dokonce už asi chápu, proč to tam musí být :-)

lukyer
Člen | 33
+
0
-

To vysvětlení bych si rád poslechl, taky to mám akorát naučené jako básničku, že to tam musí být :) Po pravé podstatě jsem nepátral zatím. Dík :)

Filip Procházka
Moderator | 4668
+
0
-

Protože v tom startupu, který je v https://api.nette.org/…ter.php.html#228, se nastavuje privátní property, která když nebude nastavena, tak presenter vyhazuje výjimku.

edmund
Člen | 28
+
0
-

Super,
odkaz od redheada mi nejenže objasnil poslední nejasnosti, ale navíc i zodpověděl otázku, kterou jsem, ještě ani nestihl položit :-)
Zajímalo mě, jak to udělat, když z nějakého presenteru, typicky SignPresenter, nechci provádět ověření uživatele, volané v basepresenteru.