odeslaná data z formuláře $form->values vs $form->getHttpData()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vojty
Člen | 19
+
0
-
  • Nette Framework (version 2.0.6 released on 2012–10–01, https://nette.org)
  • php 5.3

Ahoj, dumpy vznikly bezprostředně po odeslání mého formu (values, getHttpData). Jakto, že ve values mi chybí hodnota ze selectboxu a v getHttpData zase hodnota checkboxu? Dělám něco špatně? Díky.

Nette\ArrayHash(4) {
   name => "tests" (5)
   short => ""
   action => ""
   visibility => FALSE
}

array(5) {
   name => "tests" (5)
   parent => "64" (2)
   short => ""
   action => ""
   ok => "Uložit" (7)
}

    public function createComponentMyForm()
    {
        $form = $this->context->createForm();

        $form->addGroup('Základní informace');
        $form->addText('name', 'Název uzlu', 40)
            ->addRule(Form::FILLED);
        if (!empty($nodes)) {
            $form->addSelect('parent', 'Nadřazený uzel', $nodes)
                ->setPrompt('Vyberte nadřazený uzel')
                ->addRule(Form::FILLED);
        }
        $form->addTextarea('short', 'Krátký popis uzlu')
            ->getControlPrototype()->class('small');
        $form->addText('action', 'Akce');
        $form->addCheckbox('visibility', 'Zveřejnit');

        $form->addGroup('Uložit změny');
        $form->addSubmit('ok', 'Uložit');
        $form->onSuccess[] = callback($this, 'saveNode');

        return $form;
    }
Felix
Nette Core | 1245
+
0
-

FALSE se imho neodesila. A mrkni na implementaci metod $form->getHttpData() vs $form->getValues(), pak to urcite pochopis :-)

jiri.pudil
Nette Blogger | 1032
+
0
-

Přesně tak, nezaškrtnutý checkbox se v POST neposílá. V getValues() ti může hodnota selectboxu chybět proto, že se ten selectbox nevytvoří (protože je $nodes empty), a Nette tak nemá tu hodnotu v POST s čím spojit.

vojty
Člen | 19
+
0
-

No s tim checkboxem to chapu, ale to s tim selectem mi nejde do hlavy. Nefaka ani takto…

$form->addSelect('parenti', 'Nadřazený uzel', array('jedna' => 'dve', 'baba' => 'jde'))
    ->addRule(Form::FILLED);

Felix: vis jak, chytremu napověz…

newPOPE
Člen | 648
+
0
-

@vojty Form::FILLED v tom kode (koment 4.) je zrejme k nicomu kedze nemas Prompt tak select bude naplneny hodnotou jedna predpokladam :-).

Jan Tvrdík
Nette guru | 2595
+
0
-

@vojty: Pošli dump $_POST a aktualizuj na Nette 2.0.10.

vojty
Člen | 19
+
0
-

@Jan Tvrdík: $_POST, $form->values, $form->getHttpData()

array(7) {
   name => "Nástěnka" (10)
   class => ""
   parent => "118" (3)
   short => ""
   action => "Dashboard:" (10)
   visibility => "on" (2)
   ok => "Uložit" (7)
}

Nette\ArrayHash(5) {
   name => "Nástěnka" (10)
   class => ""
   short => ""
   action => "Dashboard:" (10)
   visibility => TRUE
}

array(7) {
   name => "Nástěnka" (10)
   class => ""
   parent => "118" (3)
   short => ""
   action => "Dashboard:" (10)
   visibility => "on" (2)
   ok => "Uložit" (7)
}