Persistentní parametr $name, chyba v Reflection

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

Při použití persistentní parametru name, dochází k tomu že je přenášen i z jiných presenterů, které tento parametr nemají (nedědí definující presenter a ani ho nemají definován dodatečně).

Např.

class DefaultPresenter extends Presenter
{
  /** @persistent string */
  public $name;
}


class AuthPresenter extends Presenter
{
  public function renderDefault()
  {
    echo $this->link('default:default'); // ?presenter=default&name=
  }
}

Zjistil jsem že chyba je v metodě PresenterHelpers::getPersistentParams() kde je použita metoda ReflectionProperty::getDeclaringClass která místo aby vrátila DefaultPresenter vrátí ComponentContainer(proto v metodě Presenter::saveState projde podmínka s instanceof řádka 826), myslím že je to způsobeno definováním atributu $name v Component, ale nechápu proč vrací ComponentContainer.

Je možné tohle vůbec obejít? (kromě přejmenování parametrů).

Testováno na verzi PHP-5.2.3 a 5.2.6 a Nette z 25.5.08.

phx
Člen | 651
+
0
-

Teoreticky odkazujes na stranku, ktera parametr $name pouziva. Takze by tam mohl ty. Otazka zni jak se to chova kdyby $name mel v DefaultPresenteru nejakou vychozi hodnotu.

btw: jak delas, ze mas PHP kod barevne?

LM
Člen | 206
+
0
-

Ta stránka name používá ale AuthPresenter ne, tudíž nemá co předávat.

/---code php

můj supr kód

\--- ;-)

David Grudl
Nette Core | 8218
+
0
-

btw: jak delas, ze mas PHP kod barevne?

Viz https://forum.nette.org/…iewtopic.php?…

David Grudl
Nette Core | 8218
+
0
-

Chybu jsem reportoval (#45139). A není to v případě getDeclaringClass poprvé :-( (#39067, #39104)

LM
Člen | 206
+
0
-

Dík moc za report, řeším přejmenováním parametru.