Neodešlou se všechny checkboxy z formuláře

adioverride
Člen | 25
+
0
-

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

Na tvou otázku ti neodpovím, ale zkus použít https://doc.nette.org/…rms/controls#…

adioverride
Člen | 25
+
0
-

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é.

Pepino
Člen | 136
+
0
-

Zkus ještě místo getValues getHttpData co ti to vypíše.

adioverride
Člen | 25
+
0
-

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 | 201
+
+5
-

$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. 12:16)

IJVo
Člen | 37
+
0
-

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.