onSuccess se nespusti, ale getErrors() vraci prazne pole
- Tomas Jancik
- Člen | 103
zdravim
jsem dnes uz hodne mrtvej, ale uz 2 hodiny jsem si lamal hlavu nad jednim
formularem, ktery se mi nechce odeslat (nezavola se funkce onSuccess)
v presenteru mam
public function createComponentForm() {
$form = new \Nette\Application\UI\Form();
$form->setMethod('post');
$form->addText("school", "Škola");
$form->addText("memberOneName", "Jméno")
->setRequired();
$form->addText("memberOneDate", "Datum narození")
->setRequired();
$form->addText("memberTwoName", "Jméno")
->setRequired();
$form->addText("memberTwoDate", "Datum narození")
->setRequired();
$form->addText("memberThreeName", "Jméno")
->setRequired();
$form->addText("memberThreeDate", "Datum narození")
->setRequired();
$form->addText("memberFourName", "Jméno")
->setRequired();
$form->addText("memberFourDate", "Datum narození")
->setRequired();
$form->addText("memberFiveName", "Jméno")
->setRequired();
$form->addText("memberFiveDate", "Datum narození")
->setRequired();
$form->addText("memberSixName", "Jméno")
->setRequired();
$form->addText("memberSixDate", "Datum narození")
->setRequired();
$form->addText("memberSevenName", "Jméno");
$form->addText("memberSevenDate", "Datum narození");
$form->addSubmit('submit', 'Přihlásit tým');
$form->onSuccess[] = callback($this, 'formRegistr');
return $form;
}
public function formRegistr(\Nette\Application\UI\Form $form) {
$data = $form->getValues();
dump($data);
$this->context->prihlaskaModel->save($data);
$this->redirect('Homepage:default');
}
formular vykresluji manualne
<?php
$form->render('begin');
echo $form['school']->label . $form['school']->control;
echo "<fieldset>\n<legend>1. člen</legend>";
echo $form['memberOneName']->label . $form['memberOneName']->control;
echo $form['memberOneDate']->label . $form['memberOneDate']->control;
echo "</fieldset>";
echo "<fieldset>\n<legend>2. člen</legend>";
echo $form['memberTwoName']->label . $form['memberTwoName']->control;
echo $form['memberTwoDate']->label . $form['memberTwoDate']->control;
echo "</fieldset>";
echo "<fieldset>\n<legend>3. člen</legend>";
echo $form['memberThreeName']->label . $form['memberThreeName']->control;
echo $form['memberThreeDate']->label . $form['memberThreeDate']->control;
echo "</fieldset>";
echo "<fieldset>\n<legend>4. člen</legend>";
echo $form['memberFourName']->label . $form['memberFourName']->control;
echo $form['memberFourDate']->label . $form['memberFourDate']->control;
echo "</fieldset>";
echo "<fieldset>\n<legend>5. člen</legend>";
echo $form['memberFiveName']->label . $form['memberFiveName']->control;
echo $form['memberFiveDate']->label . $form['memberFiveDate']->control;
echo "</fieldset>";
echo "<fieldset>\n<legend>6. člen</legend>";
echo $form['memberSixName']->label . $form['memberSixName']->control;
echo $form['memberSixDate']->label . $form['memberSixDate']->control;
echo "</fieldset>";
echo "<fieldset>\n<legend>7. člen (náhradník)</legend>";
echo $form['memberSevenName']->label . $form['memberSevenName']->control;
echo $form['memberSevenDate']->label . $form['memberSevenDate']->control;
echo "</fieldset>";
echo $form['submit']->control;
$form->render('end');
?>
po odeslani formulare se nespusti funkce definovane v onSuccess. kdyz jsem
zadal onError[] = dump($form->getErrors()) tak se mi to
spusti, ale vraci prazdne pole…
muze mi nekdo poradit prosim? uz mi to dnes po celem dnu nemysli, ale potreboval
bych ten formular co nejdriv zprovoznit?
Nette2, stahovano asi ze dne 23. 9. 2011
Editoval Tomas Jancik (25. 10. 2011 21:38)
- Ot@s
- Backer | 476
Nevidím důvod, proč by to nemělo fungovat (ještě když to máš takto napřímo v presenteru). Jedině snad, že by komponenta nebyla řádně registrovaná, tj. prubni klasicky
public function createComponentForm($name) {
$form = new \Nette\Application\UI\Form($this, $name);
// atd...
}
Editoval Ot@s (26. 10. 2011 8:31)
- newPOPE
- Člen | 648
Ano tiez som mal s komponentami podobny problem. Nepripajal som ich
v konstruktore ale az return
z tovarne. @HosipLan sice
pisal ze to je jedno. Do urciteho casu vsetko fungovalo, uz si presne nepamatam
kde bol vtedy problem ale mam pocit, ze som od toho chcel sablony a neboli tam
registrovane helpery a cele sa to spravalo divne…
- Filip Procházka
- Moderator | 4668
$form->setMethod('post');
vůbec volat nemusíš, post je
výchozí.
Co se mi nelíbí, tak to tvoje renderování. Proč to nemáš v šabloně? Zkontroluj si pořádně výsledné HTML.
- Tomas Jancik
- Člen | 103
HosipLan wrote:
Co se mi nelíbí, tak to tvoje renderování. Proč to nemáš v šabloně? Zkontroluj si pořádně výsledné HTML.
mam to v sablone… mam to kvuli vlastnimu stylovani… na HTML kod jsem zbezne koukal a vypadal v pohode… ale neporovnaval jsem ho s jinyma formularama ktery renderuju klasicky
- Tomas Jancik
- Člen | 103
je to takhle primo v dokumentaci
pravda ted me napada, ze by to tam asi nemuselo byt, ale vcera mi to uz vazne nemyslelo
- Tomas Jancik
- Člen | 103
konecne jsem se k tomu zase dostal…
zkusil jsem formular renderovat klasicky
{control form}
uz funguje… chyba teda bude asi nekde u myho renderovani… zkusim na to jeste mrnout podrobnej vecer…
jeste takovej detail
{control $form}
sice formular vypise, ale chova se to uplne stejne jako kdyz to renderuju rucne… zadna chyba, ale taky zadna akce…
zkusil jsem porovnat co to vypisuje a nasel tohle…
{control form}
<input type=„text“ class=„text“ name=„memberSevenDate“ id=„frmform-memberSevenDate“ value="" />
{control $form}
<input type=„text“ class=„text“ name=„memberSevenDate“ id=„frm-memberSevenDate“ value="" />
- Tomas Jancik
- Člen | 103
voda wrote:
A jak předáváš formulář do šablony? Asi ho nemáš připojenej k presenteru.
celou tu fci createComponentForm mam primo v presenteru…
- Tomas Jancik
- Člen | 103
kdyz jsem to vykresloval rucne tak jsem delal
$this->template->form = $this->createComponentForm();
kdyz pouzivam klasicke renderovani Nette, tak nic takoveho nedelam a jen v sablone volam
{control form}
- voda
- Člen | 561
citace z dokumentace
Továrničky nikdy nevoláme přímo, zavolá se sama ve chvíli, kdy komponentu poprvé použijeme.
Pokud ji zavoláš takhle přímo, tak se nepřipojí k presenteru a pak to nefunguje. Pokud ho chceš předat do šablony tak:
$this->template->form = $this['form'];
- Tomas Jancik
- Člen | 103
voda wrote:
citace z dokumentace
Továrničky nikdy nevoláme přímo, zavolá se sama ve chvíli, kdy komponentu poprvé použijeme.
Pokud ji zavoláš takhle přímo, tak se nepřipojí k presenteru a pak to nefunguje. Pokud ho chceš předat do šablony tak:
$this->template->form = $this['form'];
ted uz to funguje perfektne a muzu pokracovat dal… diky