Nastavení výchozí hodnoty inputu po připojení k presenteru
- ondrej256
- Člen | 187
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
MyFormWrap
v constructoru voláš parent, ale ta třída od
ničeho nedědí, createComponentMyForm
se pak zavolá kde?
- David Matějka
- Moderator | 6445
pripojeni by vadit nemelo, melo by to i tak projit skrze tu cast
!$form->isSubmitted()
muzes zkusit oddebugovat, proc isSubmitted vraci true?
- ondrej256
- Člen | 187
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.