Po submitu formuláře prázdné hodnoty

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

Ahoj, úplně začínám s Nette, tak se omlouvám za tupý dotaz.. Mám následující problém:

<?php
public function createComponentInzeratForm(){
		if (count($this->inzerat)==0){
			$novy = true;
		}
		else
		{
			$novy = false;
		}
		$form = new BaseForm($this, 'inzeratForm');

		if ($novy) {
			$form->addText('inzeratid', 'Číslo inzeratu')->setDisabled(true);
		}
		else
		{
			$form->addText('inzeratiddisabled', 'Číslo inzeratu')->setDisabled(true)->setDefaultValue($this->inzerat['inzeratid']);
			$form->addhidden('inzeratid');
		}
		$form->addText('nazev', 'Název')->addRule(Form::FILLED, 'Název musí být vyplněn.');


	    $form->setDefaults($this->inzerat);
	    $form->addSubmit('save', 'Uložit');
	    $form->onSubmit[] = callback($this,'inzeratFormSubmitted');
	    $form->onInvalidSubmit[] = callback($this, 'inzeratFormIvalidSubmitted');

	    RETURN $form;

	}
?>

a

<?php
public function inzeratFormSubmitted($form){

		$hodnotyzformu = $form->getValues();
		Debug::dump($hodnotyzformu['inzeratid']);
		if (empty ($hodnotyzformu['inzeratid'])){
			unset($hodnotyzformu['inzeratid']);
		}

		try{
			$inzeratid = $this->inzeratModelService->save($hodnotyzformu);
		}
		catch (DibiException $e) {
			throw new RuntimeException($e);
		}
	}

?>

Pokud edituju záznam, otevře se formulář s naloadovanými hodnotami, kde je i položka inzeratiddisabled vyplněná, pokud ji vydumpuji ve funkci submit – vrací se mi NULL. Pokud vydumpuji inzeratid je také null. Zkoušel jsem to řešit i tím, že by políčko nebylo jako hidden ale jako text, správně se dotáhne číslo editovaného záznamu (inzeratid) ale z metody je vždycky NULL. zajímavé že všechny ostatní hodnoty z formuláře vydumpovat jdou a obsahují skutečně hodnoty zeditované ve formuláři. vůbec si s tím nevím rady. Díky

Editoval ptrfrc (13. 5. 2011 23:36)

ptrfrc
Člen | 4
+
0
-

Tak jsem na to nakonec přišel. Ać mě to jde větví else, pravděpodobně zafunguje ->setDisabled(true); z true větve. Je to možné?
Každopádně když to z větve true oddělám ten disable, tak mi to funguje.

Majkl578
Moderator | 1364
+
0
-

Disabled prvky se na server neposílají, proto ti to nefunguje. A když ten prvek disabluješ vždycky (v obou větvích ifu), není se čemu divit.

ptrfrc
Člen | 4
+
0
-

No moment, ve větvi else se disabluje úplně jiná položka.

Majkl578 napsal(a):

Disabled prvky se na server neposílají, proto ti to nefunguje. A když ten prvek disabluješ vždycky (v obou větvích ifu), není se čemu divit.

Majkl578
Moderator | 1364
+
0
-

Hm no jasně, už bylo pozdě. :P Co je v $this->inzerat, je tam to co by mělo být, aby se to do té else větve dostalo?

ptrfrc
Člen | 4
+
0
-

Ano bylo, zkoušel jsem to ověřit tak, že jsem u toho popisku toho textového políčka ve větvi else přidal navíc nějaké písmena, takže jsem si jistý že to tím elsem jde. Ale prostě mi to tak dělá furt. Jakmile ve větvi then oddělám ten disable tak mi ta hodnota přijde, jinak ne. Je to strašně zapeklité, no vyřeším to nějak jinak. Ale dost sem se s tím natrápil :)

Jur4
Člen | 51
+
0
-

A je jisté, že se to dostane do else větve i při submitu (formulář se vytváří znovu)? Podle mě se ti při submitu nenaplní proměnná $this->inzerat nebo se ti naplní jinak než při původním renderu formuláře a nevleze ti to do else větve. Ta proměná by měla být naplněná v action metodě.