signály vs perzistentní parametry
- crempa
- Člen | 198
Zdravim, mel bych jeden dotaz..
pokud rekneme v ramci komponenty pouziji perzistentni parametr (napr. $okno) a zaroven mam signal (napr. „rozbal“ ktery ktery ma taktez parametr $okno) tj. vypada to treba nasledovne:
<?php
class NejakaKomponenta extends Control
{
/** @persistent */
public $okno = 0;
...
handleRozbal($okno, $kam)
{
...
}
...
}
?>
Pokud pouzivam zaroven perzistentni parametr a parametr signalu „rozbal“ tak ten signalovy „pretizi“ ten perzistentni (hodnota v nem je nahrazena tou signalovou)… No a me by zajimalo zde je to vlastnost, chyba nebo jak – jaka jsou vlastne vztahy mezi temito hodnotami resp. signaly a perzistentnimi parametry. Logicky bych ocekaval ze vztah by mezi nimi nemel byt zadny – (resp. je jasne ze bych si mel sam pohlidat aby se tyto nazvy neprekryly pokud to tak nechci)
V dokumentaci se o tom moc nepise a navic mam pocit ze casti tykajici se parametru u signalu nejsou v dokumentaci vysvetleny prilis stastne, sam jsem to pochopil tak jako by parametry u handle metod musely byt nazvany tak aby do nich „zapadl“ nektery z parametru v URL a pritom se v ramci {link signal, parameters} sami nastavuji, v quick startu je pak prave „pretizen“ parametr $page aby to fungovalo..
No mozna jsem ale mimo a nekdo me presne vysvetli jak se veci maji..
Diky za Vas cas, P.
- David Grudl
- Nette Core | 8218
crempa napsal(a):
Pokud pouzivam zaroven perzistentni parametr a parametr signalu „rozbal“ tak ten signalovy „pretizi“ ten perzistentni (hodnota v nem je nahrazena tou signalovou)… No a me by zajimalo zde je to vlastnost, chyba nebo jak – jaka jsou vlastne vztahy mezi temito hodnotami resp. signaly a perzistentnimi parametry. Logicky bych ocekaval ze vztah by mezi nimi nemel byt zadny – (resp. je jasne ze bych si mel sam pohlidat aby se tyto nazvy neprekryly pokud to tak nechci)
Pro pochopení možná bude nejlepší celou věc vysvětlit pozpátku; obráceně, než jak skutečně vznikla. Zkusme to.
Začnu tím, že ty parametry se od sebe vlastně téměř neliší.
Každá komponenta (tedy i presenter) má přidělen jeden jmenný prostor a
v něm sídlí všechny parametry. Balík všech parametrů je uložen v poli
$params
každé komponenty, dá se k nim přistupovat také
metodou getParam(...)
.
Parametry nastavíme třeba metodou link()
, kolem které se to
vlastně všechno točí:
$this->link('rozbal!', array('param1' => 123, 'param2' => TRUE, 'param3' => $id));
Tzv. parametry signálů (a platí to i pro parametry metod action— nebo
render—) s liší jen v tom, že nám zjednodušší zápis odkazů. Pokud
existuje metoda handleRozbal($param1, $param2)
, stačí psát:
$this->link('rozbal!', array(123, TRUE, 'param3' => $id)); // první dva se párují s param1 a param2
Stejně tak i persistentní parametry se liší jen v drobnosti –
v tom, že je nemusíme v odkazech uvádět vůbec. Pokud bude
param3
persistentní, stačí psát:
$this->link('rozbal!', array(123, TRUE)); // param3 se doplní automaticky
V takovém případě je možné vynechat array()
:
$this->link('rozbal!', 123, TRUE);
U persistentních parametrů se ještě navíc pro snažší přístup
vytváří reference mezi položkou ve zmíněném poli $params a proměnnou
objektu, tj.
$this->param3 = & $this->params['param3']
.
Je to takto srozumitelnější?
- crempa
- Člen | 198
Diky Davide uz je to mnohem jasnejsi, ona je ta dokumetace tak vlastne spravne, jako klicove vidim ono
Každá komponenta (tedy i presenter) má přidělen jeden jmenný prostor a v něm sídlí všechny parametry
doted jsem videl jednotlive parametry „rozskatulkovany“ podle toho v jakem kontextu (signal,perzistent…) jsou pouzity resp. jak se predavaji.. takhle uz to vse dava smysl :-)
ad Mas3r: podle me je to nutnost, jak by jsi pak rozlisil takove parametry v pripade pouziti stejne komponenty vicekrat v ramci jednoho presenter:view? V quick startu si treba muzes vlozit ukazkovou tabulku na jednu stranu vicekrat pouhym vytvorenim dalsi instance komponeny (s jinym nazvem) a na obou bezproblemu a vzajemnych zavislosti bude fungovat strankovani i razeni…