Při použití ->getValues() formulář nevrací hodnoty

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

Zdravím,
mám vytvořenou továrničku:

public function createComponentEdit()
        {
            $form = new AppForm;
            $defs = new ListModel;
            $defaults = $defs->vyber($this->getParam('edit'))->fetch();
            $renderer = $form->getRenderer();

            $renderer->wrappers['form']['container'] = NULL;
            $renderer->wrappers['form']['errors'] = FALSE;
            $renderer->wrappers['group']['container'] = NULL;
            $renderer->wrappers['group']['label'] = 'h3';
            $renderer->wrappers['pair']['container'] = NULL;
            $renderer->wrappers['controls']['container'] = NULL;
            $renderer->wrappers['control']['container'] = 'td';
            $renderer->wrappers['control']['errors'] = TRUE;
            $renderer->wrappers['label']['container'] = NULL;

            foreach ($this->template->set['col'] as $key => $col)
            {
                $form->addText($col['field'], '')->getLabelPrototype()->class('hidden');
            }

            $form->addSubmit('send', 'Ulož');

            $form->onSubmit[] = callback($this, 'formEditSubmitted');

            $form->setDefaults($defaults);

            return $form;
        }

v template mám

{widget edit}

a zpracovávám touto metodou:

if($form['send']->isSubmittedBy())
            {
                $val = $form->getValues();
                Debug::dump($val);
                die();
            }

vrací

array(0)

Víte někdo, co tam mám za chybu ? Předem díky za odpovědi

westrem
Člen | 398
+
0
-

Si si isty, ze sa ti pri potvrdeni formularu, tzn. pri novom requeste vytvori rovnaky formular? Teda v tvojom pripade sa jedna o rovnake naplnenie pola $this->template->set['col'], pretoze ocividne submit podmienka zbehne ale formular nema ziadne polia odkial by mal brat hodnoty.

redhead
Člen | 1313
+
0
-

Aneb továrnička se volá při obou requestech a musí vytvořit stejný formulář.

eldest
Člen | 58
+
0
-

Zřejmě jsem nepochopil, co mám udělat. Mám znovu nastavit proměnnou $this->template->set[‚col‘] ?

redhead
Člen | 1313
+
0
-

Musí být nastavena stejně jako při zobrazování formuláře – využíváš ji v foreachi v továrničce, továrnička musí vytvořit stejný formulář v obou requestech (při zobrazení i odeslání). Proto by nastavena měla být.

redhead
Člen | 1313
+
0
-

Pokud navíc tu proměnnou setuješ v render fázi, je pozdě, formulář se při odeslání vytvoří před render metodou (resp. po action metodě)

Patrik Votoček
Člen | 2221
+
0
-

jen doplnim co uz napsal redhead… navic je to $this->template->set['col'] osklive a fuj a vubec se me nelibi. nevim sice co a proc to tak je ale na 99.9% je to spatne.

trollnet
Člen | 8
+
0
-

ahoj, chtel bych se zeptat na jednu vec:
1 formulare bych chtel ukladat do 2 tabulek. Nevim ale jak si za pomoci metody $data = $form->getValues(); (nebo nejak jinak) coz mi da napr. hodnoty

<?php
array(2) {
   "predmet" => "chemie" (3)
   "dochazka" => "ano"
   "znamka" => "5"
}
?>

vytahnout jen tu hodnotu, kterou chci tak, abych pro vlozeni do databaze pouzil

<?php
public static function insert($data)
      {
          dibi::query('
			INSERT INTO [tabulka]', $data
          );
      }
?>

Pozn. Nechci menit dotaz na

<?php
public static function insert($data)
      {
          dibi::query("INSERT INTO [tabulka] (sloupec1) VALUES ($hodnota1, $hodnota2)");
      }
public static function insert2($data)
      {
          dibi::query("INSERT INTO [tabulka2] (sloupec1) VALUES ($hodnota3)");
      }
?>

a do toho vkladat $data['hodnota++'], aby dotaz zustal universalni

Foowie
Člen | 269
+
0
-

Já bych si rozdělil ten form do 2 FormContainerů a potom $form->getValues() ti vrátí pole o dvou položkách (polích) s hodnotami. První pole jeden insert, druhé druhý.

bazo
Člen | 620
+
0
-

ved si z toho pola sprav dve a mas to vychytane

trollnet
Člen | 8
+
0
-

diky za rychlou odpoved… no drzel bych se toho kontejneru, ale s nette zacinam a po pravde nevim, jak na to. Muj formular bez validace vypada nejak takhle

<?php
public function createComponentPridatForm()
      {
          $form = new AppForm();
          $form->addText('predmet', 'Predmet');  // do prvni tabulky
          $form->addText('znamka', 'Znamka', 2); // do druhe tabulky
          $form->addSubmit('Submit', 'Pridat');
          $form->onSubmit[] = callback($this, 'pridatFormSubmitted');

          return $form;
      }

      public function pridatFormSubmitted(AppForm $form)
      {
          $data = $form->getValues();
	  PridatModel::insert($data);
          $this->flashMessage('Predmet ulozen!');
          $this->redirect('default');
      }
?>

Muzete mi prosim ukazat jak upravit formular a pak se nasledne odkazovat na data? Moc dik

Editoval trollnet (26. 11. 2010 22:52)

Foowie
Člen | 269
+
0
-

Malá nápověda

$pred = $form->addContainer('pred');
$pred->addText('predmet', 'Predmet');  // do prvni tabulky

… a pak

$values = $form->getValues();
$prvniTabulka = $values['pred'];

Editoval Foowie (26. 11. 2010 22:55)

trollnet
Člen | 8
+
0
-

super, diky moc Foowie!