Neodešlou se všechny checkboxy z formuláře
- adioverride
- Člen | 26
Ahoj,
prosím vás řeším situaci. Vytvořil jsem si formulář:
protected function createComponentForm()
{
$data = $this->getFilterData();
$form = new Form;
$form->setTranslator($this->presenter->translator);
$manufacturerContainer = $form->addContainer('manufacturer');
foreach ($data['manufacturers'] as $manufacturer) {
$manufacturerContainer->addCheckbox($manufacturer['data']['id'], $manufacturer['name']);
}
$form->addSubmit('process', 'messages.shopItemFilterControl.process');
$form->onSuccess[] = [$this, 'processFilterForm'];
return $form;
Formulář se hezky vygeneruje, obsahuje zhruba 17 checkboxů. Kliknuli na tlačítko „process“ volá se funkce processFilterForm() .
public function processFilterForm(Form $form)
{
dump($form->getValues());
die();
}
a výsledek je:
Nette\Utils\ArrayHash #f6ea
manufacturer => Nette\Utils\ArrayHash #6473
| 1 => false
| 98 => false
| 8 => false
| 74 => true
| 92 => false
Vůbec nechápu proč položek v manufacturer je pouze 5. Dokáže mi někdo prosím vysvětlit, kde dělám chybu?
Díky,
A.
- Pepino
- Člen | 257
Na tvou otázku ti neodpovím, ale zkus použít https://doc.nette.org/…rms/controls#…
- adioverride
- Člen | 26
Pepino napsal(a):
Na tvou otázku ti neodpovím, ale zkus použít https://doc.nette.org/…rms/controls#…
Díky za bleskovou odpověď, checkboxlist jsem zkoušel a prakticky výsledek je ten samý, jen odfiltruje nevybrané položky ale pořád nepošle ostatní vybrané.
- adioverride
- Člen | 26
Pepino napsal(a):
Zkus ještě místo getValues getHttpData co ti to vypíše.
Super, díky moc.
V getHttpData vidím všechny odeslané checkboxy, jen úplně nerozumím tomu
důvodu proč tomu tak je :)
- Michalek
- Člen | 211
$data = $this->getFilterData();
Nezmění se parametry filtru po odeslání formuláře? Nevím, jestli to ještě platí, moc to nesleduju, ale dřív se formulář po odeslání „vytvořil“ znovu a znovu šahal do databáze a tak. Takže když se liší vstupní data, formulář se vytvořil jinak a prošla jen ta data co byla stejná.
Zkusil bych přidat bdump($data)
a v Laděnce by mělo být
vidět co to dělá. Asi. :)
Editoval Michalek (27. 5. 2022 12:16)
- IJVo
- Člen | 38
adioverride napsal(a):
Pepino napsal(a):
Zkus ještě místo getValues getHttpData co ti to vypíše.
Super, díky moc.
V getHttpData vidím všechny odeslané checkboxy, jen úplně nerozumím tomu důvodu proč tomu tak je :)
Myslím, že je to proto, že dle specifikace Html se u Input typu „checkbox“ hodnoty (value) u nezaškrtnutých políček neodesílají, viz zde: https://developer.mozilla.org/…put/checkbox#…
Právě proto se v případě potřeby v Nette dá použít getHttpData.