Replikátor formulářových kontejnerů + $this->getParameter(‚liga‘)
- Taps
- Člen | 168
Zdravím, mám níže uvedený kod a potřeboval bych do Replikátoru formulářových prvků dostat hodnotu parametru liga, který se nachází v URL. Mohl by mi někdo poradit jak na to.
protected function createComponentZapsatVysledkyUtkaniForm() {
// echo $liga;
$form = new Form();
$form->addText('SkryteID','Skryte')
->setValue($this->getParameter('liga'));
for($kolo=1;$kolo<16;$kolo++){
$pocetkol[]=$kolo;
}
$form->addSelect('kolo', 'Kolo',$pocetkol);
$form->addText('datum', 'Datum');
$form->addDynamic('tymy', function (Container $tymy) {
//tady potřebuji dostat $this->getParameter('liga')
$DomaciTym=\TymyModel::VypisTymyRoletka(1);
$tymy->addSelect('domaci', 'Domácí Tým', $DomaciTym);
$tymy->addSelect('hoste', 'Hostující Tým', $DomaciTym);
$tymy->addText('gdomaci', 'Góly Domácí');
$tymy->addText('ghoste', 'Góly Hoste');
}, 5);
$form->addSubmit('create', 'Uložit');
$form->onSuccess[] = callback($this, 'zapsatVysledkyUtkaniFormSubmitted');
return $form;
}
- Ot@s
- Backer | 476
Taps napsal(a):
Zdravím, mám níže uvedený kod a potřeboval bych do Replikátoru formulářových prvků dostat hodnotu parametru liga, který se nachází v URL. Mohl by mi někdo poradit jak na to.
protected function createComponentZapsatVysledkyUtkaniForm() {
$liga = $this->getParameter('liga');
// echo $liga;
$form = new Form();
$form->addText('SkryteID','Skryte')
->setValue($liga);
$pocetkol = range(1,16);
$form->addSelect('kolo', 'Kolo',$pocetkol);
$form->addText('datum', 'Datum');
$form->addDynamic('tymy', function (Container $tymy) use ($liga) {
//tady potřebuji dostat $this->getParameter('liga')
$DomaciTym=\TymyModel::VypisTymyRoletka($liga);
$tymy->addSelect('domaci', 'Domácí Tým', $DomaciTym);
$tymy->addSelect('hoste', 'Hostující Tým', $DomaciTym);
$tymy->addText('gdomaci', 'Góly Domácí');
$tymy->addText('ghoste', 'Góly Hoste');
}, 5);
$form->addSubmit('create', 'Uložit');
$form->onSuccess[] = callback($this, 'zapsatVysledkyUtkaniFormSubmitted');
return $form;
}
- Taps
- Člen | 168
Ještě jednou jsem kontroloval skript a narazil jsem na problém. Pokud použiji use ($liga), tak se mi z Replikátoru (z formulářových položek select) nepřenáší žádná hodnota, i když value je správně vyplněno. Níže uvádím skript na zpracování
public function zapsatVysledkyUtkaniFormSubmitted(Form $form) {
$kolo=$form->values->kolo;
foreach ($form['tymy']->values as $data) { // hodnoty formulářového prvku
if(!empty($data['gdomaci'])){
$VysledkyUtkani=array(
'kolo'=> $kolo,
'id_domt'=>$data['domaci'],
'id_hostt'=>$data['hoste'],
'goly_domaci'=>$data['gdomaci'],
'goly_hoste'=>$data['ghoste'],
'sezona'=>9,
'id_ligy'=>$form->values->liga,
'datum'=>$form->values->datum
);
\ZapasyModel::ZapisVysledkuUtkani($VysledkyUtkani);
}
}
$this->flashMessage('Zápasy byly uloženy');
$this->redirect(':Admin:Zapasy:zapsatVysledky?liga='.$form->values->liga);
}
V případě že do níže uvedeného skriptu dám místo $liga hodnotu 1 tak vše funguje v pořádku
$DomaciTym=\TymyModel::VypisTymyRoletka($liga);
Editoval Taps (19. 7. 2012 13:45)
- ViPEr*CZ*
- Člen | 817
To používání těch statických metod je tfuj. Pokud je v URL adrese opravdu parametr ?liga=xxx pak přes $this->getParameter(‚liga‘); se k němu dostanete. Pokud se form odešle, pak jestli se nepletu, tak tento parametr bude chybět (využijte třeba persistentní parametr). A ten redirect se dá použít také s parametrem a nemusí se tam takto nehezky skládat text.
$params = array('liga' => $form->values->liga);
$this->redirect(':Admin:Zapasy:zapsatVysledky', $params);
- Vojtěch Dobeš
- Gold Partner | 1316
Persistentní parametr je prakticky členská proměnná třídy presenteru,
s anotací @persistent
(musí být public). Např.:
/** @persistent */
public $foo;
Lze pak vytvořit odkaz např.: {link this, foo => 255}
. Na
odkázané stránce bude proměnná obsahovat 255
. Co je ale
hlavní – {link this}
vytvoří odkaz, kde foo
bude
opět 255
. Aby se parametr ztratil, musel by uživatel přejít na
odkaz, který bude parametr explicitně vynullovávat. Proto persistentní
parametry.