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
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.