Ztráta parametrů formu při submitu

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

Nette Framework 0.9.2 (revision b9fd602 released on 2009–11–12)

Ahoj, resim jeden mensi problem, ktery umi obejit, ale nezda se mi to moc pekne.

Mam stranku, na ktere tvorim formular.
V tomto formu existuje select, ktery je plneny z DB a to primo v tovarnicce.
Problem je, ze k tomu potrebuje SQL dotaz, ktery pouziva dvou parametru z URL.
Pri zobrazeni formu uzivateeli je vsechno v pohode a select box je naplneny.
Potize nastanou ve chvili, kdy se provede submit.
Aplikace znovu vleze do tovarnicky a vytvori form. Protoze se ale URL zmenilo na ?do=… tak tam pozadovane parametry nejsou a select box je prazdny.
Diky tomu obsluzna funkce nedostane hodnotu ze SelectBoxu, i kdyz z ostatnich poli ano.
Samozrejme je to proto, ze form byl tvoren znovu a selectBox byl prazdny.
Nevim jak to vyresit, momentalne to obchazim tak, ze misto funkce ->getValues() pouzivam v obsluzne funkci ->httpData[‚idselectboxu‘].
V poli $POST i v poli $this[‚form‘]->httpData totiz je hodnota zadana uzivatelem ulozena porad.
Jak to mam vyresit ciste?

kod tovarny:

<?php
public function createComponentUnassignAT()
    {
        $id = $this->getParam('id');
        $at = $this->getParam('at');
        $max = 0;
        if ($id && $at)
        {
            $max = $this->db->query("SELECT maxperdevice FROM devicetypeattribute WHERE iddevicetype = $id AND idattributetype = $at")->fetchSingle();
            $pocet = array();
            for ($i = 1; $i<=$max; $i++)
            {
                $pocet[$i] = $i;
            }
        }

        $form = new AppForm();

        $zprava = "Opravdu chcete odebrat tento atribut ze šablony?";

        $form->addSelect('pocet','Kolik těchto atributů chcete odebrat?',$pocet)
            ->setDefaultValue('1');
        $form->addSubmit('ano','Ano','')
            ->onClick[] = array($this,'unassignATHandler');
        $form->addSubmit('ne','Ne',$zprava)
            ->onClick[] = array($this,'cancelHandler');
        $form->addHidden('id')
            ->setValue($id);
        $form->addHidden('at')
            ->setValue($at);

        return $form;
    }
?>

Taky napisu obsah obsluzne fce:

<?php
public function unassignATHandler()
    {
        $values = $this['unassignAT']->getValues();
        Debug::dump($values);
        Debug::dump($this['unassignAT']->httpData);
        die();
    }
?>

A po potvrzeni formu se zobrazi dve pole:

array(3) {
   "pocet" => NULL
   "id" => string(1) "2"
   "at" => string(1) "2"
}

array(4) {
   "pocet" => string(1) "1"
   "ano" => string(3) "Ano"
   "id" => string(1) "2"
   "at" => string(1) "2"
}

Edit: Jeste jsem zapomnel, ze mi z URL mizi parametry a nevim, zda je to spravne ci ne

puvodni

/devicetype/unassign/2?at=2

se zmeni na

/devicetype/unassign/?do=unassignAT-submit

a tim prijdu o ty parametry

Editoval worsik (8. 2. 2010 11:49)

Ondřej Mirtes
Člen | 1536
+
0
-
public function unassignATHandler(SubmitButton $button)
    {
        $values = $button->form->values;
	...

Co teď?

worsik
Člen | 40
+
0
-

Stale stejne

array(4) {
   "pocet" => NULL
   "id" => string(1) "2"
   "at" => string(1) "2"
   "max" => string(1) "2"
}

Edit: „max“ je jen novy hidden

Editoval worsik (8. 2. 2010 11:47)

worsik
Člen | 40
+
0
-

mimochodem jsem to obesel timto zpusobem:

<?php
$values['pocet'] = $this['unassignCT']->httpData['pocet'];
?>