Nastavení výchozí hodnoty inputu po připojení k presenteru

ondrej256
Člen | 186
+
0
-

Zdravím,

narazil jsem na takový problém. Mám obyčejný formulář, kterému předávám parent a name již v konstruktoru. Když ale některému políčku nastavím výchozí hodnotu tak se inputu nenastaví.

V \Nette\Forms\Controls\BaseControl::setDefaultValue($value) to neprojde přes podmínku:

		$form = $this->getForm(false);
		if ($this->isDisabled() || !$form || !$form->isAnchored() || !$form->isSubmitted()) {
			$this->setValue($value);
		}

a tím pádem se hodnota do inputu nenastaví.

Parenta a name předávat do potřebuju, abych mohl vypisovat flashmessage v presenteru.

Můj kód:

Presenter

public function createComponentForm($name) {
	return new MyFormWrap($this, $name);
}

Wrap

class MyFormWrap extends \Nette\Application\UI\Control {

public function __construct($parent, $name) {
	parent::__construct($parent, $name);
}

public function createComponentMyForm($name) {
	$form = new MyForm($this, $name);
	return $form->createForm();
}

Formular

class MyForm extends Nette\Application\UI\Form {

public function __construct($parent, $name) {
	parent::__construct($parent, $name);
}


public function createForm() {
	$this->addText('myInput', 'Muj input')
		->setDefaultValue('ahoj'); // hodnota se inputu nenastavi, Když parent a neme nepredavam do rodiče tak se inputu hodnota normalne nastavi
	return $this;
}

}

Je nějaké řešení jak nastavovat výchozí hodnoty a zároveň zachovat předávání parenta ?

Editoval ondrej256 (22. 10. 2018 13:50)

Ondřej Kubíček
Člen | 494
+
0
-

MyFormWrap v constructoru voláš parent, ale ta třída od ničeho nedědí, createComponentMyForm se pak zavolá kde?

David Matějka
Moderator | 6445
+
0
-

pripojeni by vadit nemelo, melo by to i tak projit skrze tu cast

!$form->isSubmitted()

muzes zkusit oddebugovat, proc isSubmitted vraci true?

ondrej256
Člen | 186
+
0
-

Jo sory. Jen jsem to tak načrtl jak to zrhuba mám. Zapomněl jsem tam dopsat extends. Teď jsem to upravil.

A už jsem přišel na řešení.

Upravil jsem to takto:

public function createForm() {
    $this->addText('myInput', 'Muj input')
			->setDisabled(TRUE)
        ->setDefaultValue('ahoj') // hodnota se inputu nenastavi, Když parent a neme nepredavam do rodiče tak se inputu hodnota normalne nastavi
			->setDisabled(FALSE)
    return $this;
}

A už to funguje. Pokud by někdo znal čisté řešení tak ho uvítám.

ondrej256
Člen | 186
+
0
-

Tak problém byl nakonec někde jinde. SetDefaults se volalo ještě na jiném místě a přepsalo mě původní hodnotu. Toto byl jen jeden ze způsobů jak to obejít.