Ztráta parametrů formu při submitu
- worsik
- Člen | 40
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
public function unassignATHandler(SubmitButton $button)
{
$values = $button->form->values;
...
Co teď?