Strata dat z form po odolani cez callback

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

Zdravim nette komunitu.

chcel by som Vas poprosit o radu pri rieseni problemu so stratenymi datami odoslanymi z formularu.
Formular je vytvarany nasledovne

	public function createComponentOdpovedForm($name = 'Elearning')
	{
    $area = 19;
		$form = new NAppForm($this, $name);
    $vyplnfields = TimanModules::getslideformfield($this->slideid);
// manualne vytvorena textarea, ktora sa posle po submit form
    $form->addGroup('')
	       ->setOption('description', 'aaa');
    $form->addTextarea($area, '')
         ->addRule(NForm::FILLED, 'Vyplňte text.')
         ->setEmptyValue('jano');
//nacita z databazy polia, ktore sa maju zobrazit
   foreach($vyplnfields as $record)
    {
// START pridanie textarea do formulara s vyplnenym alebo prazdnym textom podla toho ci existuje uz nejaka odpoved alebo nie
    	if ($record['slidetype'] == 'odpoved')
    	{
		    $form->addGroup('')
			       ->setOption('aaa', $record['text']);
// hlada v DB ci existuje nejaka odpoved, ktora sa ma vlozit do text area
    		$countanswer = TimanModules::getcountslidefieldanswer($record['slidefieldID'], $this->userid);
    		if ($countanswer[0]['count_all']>0)
    		{
// ak sa odpoved najde, nacita ju z DB a vlozi do text area
			    $lastanswer = TimanModules::getlastslidefieldanswer($record['slidefieldID'], $this->userid);
			    $form->addTextarea($record['slidefieldID'], '') //$key['slidefieldID']
			         ->addRule(NForm::FILLED, 'Vyplňte text.')
			         ->setEmptyValue($lastanswer[0]['answer']);         //$lastanswer[0]['answer']
    		}
    		else
// ak sa odpoved nenajde, textarea ostava prazdna
    		{
			    $form->addTextarea($record['slidefieldID'].'a', '')
			         ->addRule(NForm::FILLED, 'Vyplňte text.');
    		}
    	}
    }

    $form->addImage('odeslat', 'images/p03.jpg', 'Odoslat');
		$form->onSubmit[] = callback($this, 'homeFormSubmitted');
		$form->addProtection('Prosím odošlite formulár znova (bezpečnostný token expiroval).');
		return $form;
	}

po submite sa data odoslu do

	public function homeFormSubmitted($form)
	{
		$formValues = $form->getValues();
  var_dump($form);
  var_dump($formValues);
  exit;
}

vo var_dumpe $formValues mam len obsah textarea, ktora je vytvorena v pred foreach.

Pri zobrazeni formulara cez web vidim spravne vytvoreny formular, to znamena, ze mam tam jednu textareu z casti pred foreach a jednu textareau z casti vytvorenej vo foreach.

Problem je, ze po submit form do homeFormSubmitted dostanem data len z tej prvej textarei, ta druha sa mi vo var_dumpe neobjavi.

Skusal som si dat aj var_dump($form), a tam tie data vidim, len k nim neviem pristupit cez $form->getValues();

Viete mi s tymto problemom nejako poradit alebo ma nasmerovat?
pouzivam nette 0.9.6

Vopred Vam vsetkym dakujem.

Editoval folvo (3. 6. 2011 21:15)

Filip Procházka
Moderator | 4668
+
0
-

Nette komunita tě taky zdraví a odmítá to luštit, vpravo dole u příspěvku máš editovat. /-- uprav na /--php a bude to obarvovat. Takhle se to fakt nedá číst… (ano jsem línej kopírovat si to do IDE)

folvo
Člen | 16
+
0
-

Dakujem za pripomienku.
V dalsich prispevkoch si dam n ato urcite pozor.

bojovyletoun
Člen | 667
+
0
-

Copak nemáš spuštěný netbeans permanentě?

k problému. Proběhne cyklus? Přenáší se správně proměnné $this->***id, resp mají správnou hodnotu před odesláním i po ? Vzhledem k tomu, že odeslání je signál a přenáší se vše, tak by se neměly ztrácet…

folvo
Člen | 16
+
0
-

Zdravim,

nepouzivam netbeans. Na pristup k datam pouzivam var_dump. Popravde moznosti netbeans ani nepoznam.
K cyklu. Cyklus zbehne, pretoze formularove prvky, ktore su vo foreach bloku sa vykreslia podla ocakavani.

Ako som pisal, ani data z toho formu sa nestratia, ale nemam ich pristupne cez getValues(), teda aby som bol presny, cez getvalues sa dostanem len k prvkom, ktore su pred blokom foreach.

skusal som taky maly experiment, ked som data, ktore ziskam z databazy a procesuju sa v foreach manualne vlozim do pola $record a zakomentujem foreach (je to 1 iteracia)

//   foreach($vyplnfields as $record)
    {
    $record['slidetype'] = 'odpoved';
    $record['slidefieldID'] = 18;
.
.
.

formular sa mi zobrazi presne ako v pripade

   foreach($vyplnfields as $record)
    {
.
.
.

len s tym rozdielom ze cez getvalues sa dostanem aj k formularovym prvkom, ktore boli povodne uzavrete vo foreach. Akoby bol problem ze v tom foreach je DIBI objekt, ale po obsahovej stranke su data v $record rovnake.