Hodnota perzistentniho parametru
- Mikulas Dite
- Člen | 756
Stejně jako každou jinou property, ne? Třeba
$this->parent->persistentProperty
. Nebo mi něco uniká?
Jestli je to kvůli něčemu konkrétnímu, iteruj třeba právě přes ten
getPersistentParams()
.
Edit: tzn.
foreach ($this->parent->getPersistentParams() as $var) {
echo $this->parent->$var;
}
Editoval Mikulas Dite (25. 3. 2011 22:09)
- MartyIX
- Člen | 217
@Mikulas: Snad tenhle kod trochu vysvetli, co potrebuju:
class ParentClass extends Control
protected function getComponent()
{
$component = new formComponent();
// V tomto okamziku bych rad zjistil, jakou ma hodnotu perzistentni
// promenna z formComponent, ktera urcuje co tato komponenta
// zrovna zobrazuje, a podle toho bych rad vyrendroval ParentClass control
return $component;
}
Editoval MartyIX (25. 3. 2011 22:17)
- Mikulas Dite
- Člen | 756
Když to nepotřebuješ dynamicky, tak stačí
$component->persistentVariable
. Persistent musí být public,
takže k té property je určitě přístup. V čem je zádrhel?
- MartyIX
- Člen | 217
@Mikulas: Hodnota je neustale ‚all‘ a nemeni se. Takhle je ta promenna definovana:
/** @persistent */
public $view = 'all';
Pokud vytvarim novou instanci formComponenty, tak aby hodnota perz. promenne $view se zmenila, tak by musel byt nejaky kod v konstruktoru tridy Control, jinak se ta promenna $view nemuze zmenit. Proto mi prijde, ze volani $component->persistentVariable nemuze fungovat v tomto pripade.
- arron
- Člen | 464
Snazis se IMHO o ziskani te hodnoty prilis brzo. Mechnizmus, ktery zajistuje
propagaci hodnot persistentnich parametru pouziva uplne stejne mechanizmy
vytvareni komponent jako presentery, takze v dobe tesne po volani
new formComponent()
jeste nemohl tento mechanizmus cokoliv udelat.
Proto ma ta promena defaultni hodnotu. Zkus tu hodnotu te promene ziskavat nekde
jinde (action metoda, render metoda), podle toho, v jakem presne kontextu to
pouzivas:-)
- MartyIX
- Člen | 217
arron: Jo, to jsem v podstate psal vyse. Jenze jak to udelat ciste :) Udelal jsem to tedy takto a funguje to:
private $form = null;
protected function getComponent()
{
if ($this->form == null) {
$this->form = new formControl();
$this->form->setId($this->id);
}
return $this->form;
}
public function render()
{
$form = $this->getComponent();
if ($form->view == 'view_1') {
$this->width = 80;
} else {
$this->width = 30;
}
parent::render();
}
Diky!
Editoval MartyIX (26. 3. 2011 8:22)