Replikátor formulářových kontejnerů + $this->getParameter(‚liga‘)

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

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
+
0
-

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;
}
jtousek
Člen | 951
+
0
-

Vždyť to tam máš – $this->getParameter('liga'), v čem je problém?

Pozn. místo $pocetkol použij range.

Taps
Člen | 168
+
0
-

Děkuji

Taps
Člen | 168
+
0
-

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 | 813
+
0
-

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);
Taps
Člen | 168
+
0
-

S nette začínám mohl bys mi poradit jak použít persistentní parametr

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

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.

Taps
Člen | 168
+
0
-

a je i nějaká jiná možnost jak předávat hodnotu kromě využití persistentního parametru, s nette totiž začínám a nevím jak parametr začlenit do presenteru

Editoval Taps (19. 7. 2012 22:11)