Chyba v zivotnim cyklu presenteru?
- MW
- Člen | 626
Prosim o pomoc:
generuji formular s dynamickym poctem inputu dle db. Vse vali jak ma, jen kdyz padne chyba formulare a refreshne se, tak se me vyklesli jen jeden input a jeste k tomu bez labelu..
Co delam prosim spatne?
private $data;
private $formularPole;
public function renderFormular($id) {
$this->data = $this->getModel('dataModel')->getData('akce')
->where('id', $id)->fetch();
$this->formularPole = $this->data->formular; //ziskam hodnoty z db
$this->template->data = $this->data;
}
public function createComponentAkceForm($name) {
$form = new Nette\Application\UI\Form($this, $name);
$pole = explode(",", $this->formularPole); // vytvorim z hodnot pole
for ($i = 0; $i <= count($pole) - 1; $i++) { //cyklus pro vytvareni inputu
$form->addText('data' . $i, $pole[$i] . ':')
->setRequired('Zadejte ' . $pole[$i] . '!');
}
$form->addTextCaptcha();
$form->addSubmit('send', 'Registrovat');
$form->onSuccess[] = callback($this, 'akceFormSubmitted');
return $form;
}
Diky !
Editoval MW (11. 11. 2011 19:21)
- Majkl578
- Moderator | 1364
Chyba je v tvojí hlavě, ne životním cyklu presenteru, ten jsi zřejmě
jen nepochopil. Odeslání formuláře = signál, tj. před render fází.
Nemůžeš tedy očekávat, že $this->formularPole bude obsahovat hodnoty,
které tam sypeš až v render fázi.
Mimochodem, tvé řešení je naprostá ohavnost, měl by ses za něj stydět.
Zejména za ten cyklus továrně a české proměnné a české všechno.
- MW
- Člen | 626
Nenarazel jsem na chybu v cyklu, ale spis, kde tu chybu delam ja.
Prosil jsem o radu a ne o flamy na me… proc se prosim musis takhle
povysovat? Kazdej nejak zacina a nez hanit cyklus a promene, proc me prosim
treba nezkusis poradit, jak toto resit nejlepe?
z render jsem udelal action, a to jde a chova se to, jak potrebuji.(To byla
bazne moje blba chyba a nepozornost). Otazka tedy je, proc je tedy cyklus
v tovarne tak ohavny ? Jak to resit jinak?
Kdyz uz to bylo nakousnute.
Dekuji
Editoval MW (13. 11. 2011 12:48)
- Filip Procházka
- Moderator | 4668
Ale kdepak… Řešením je rozdělit tvé renderFormular
na
akci, kde data získáš a render, kde data předáš šabloně.
private $data;
private $dataForm;
public function actionDefault($id)
{
$this->data = $this->getModel('dataModel')->getData('akce')
->where('id', $id)->fetch();
$this->dataForm = $this->data->formular;
}
public function renderDefault() // když máš $id v action, tak tady už být nemusí
{
$this->template->data = $this->data;
}
A pánové, naučte se prosím používat containery
protected function createComponentForm()
{
$form = new Nette\Application\UI\Form;
$data = $form->addContainer('data');
foreach (explode(",", $this->dataForm) as $key => $value) {
$data->addText($key, $value . ':')
->setRequired('Zadejte ' . $value . '!');
}
$form->addTextCaptcha();
$form->addSubmit('send', 'Registrovat');
$form->onSuccess[] = callback($this, 'formSubmitted');
return $form;
}
Editoval HosipLan (13. 11. 2011 15:04)
- Filip Procházka
- Moderator | 4668
Na cyklu v továrně není nic špatného. Na foru taky ne. Jenom je tu mnohem lepší cesta: foreach + container