Nefunkční callback formuláře
- filip.bartos
- Člen | 7
Ahoj,
nedaří se mi přijít na to, proč mi nefunguje u úplně jednoduchého formuláře jeho zpracování po odeslání. Zjednodušil jsem to už na kód níže. Používám PHP 5.4.4 a Nette 2.0.13. Může mě někdo nasměrovat, kde mám tu hloupost? Předem děkuju
<?php
namespace Front;
use \Nette\Application\UI\Form;
/**
* Homepage presenter.
*/
class LoginPresenter extends BasePresenter
{
public function renderDefault()
{
$form = $this->createComponentSaveForm();
$this->template->form = $form;
}
public function saveFormSubmitted($form)
{
var_dump($_POST);
}
public function createComponentSaveForm()
{
$form = new Form();
$form->addText('login', 'Name:');
$form->addSubmit('save', 'Log in')
->onClick[] = array($this, 'saveFormSubmitted');
$form->onSuccess[] = array($this, 'saveFormSubmitted');
return $form;
}
}
Formulář vykresluju v šabloně takhle:
<div>
{$form->render('begin')}
<p>
{$form['login']->label}
{$form['login']->control}
</p>
<p>
{$form['save']->control}
</p>
{$form->render('end')}
</div>
Editoval filip.bartos (10. 7. 2014 18:49)
- David Kudera
- Člen | 455
První zkus zrušit ten kód v renderDefault metodě a taky odstranit tu událost onClick ze save tlačítka. No a vykreslit zkus tak jako je tady ve druhé ukázce. A nebo pro úplné zjednodušení zatím jen takto:
{control saveForm}
Edit: a ještě createComponent* metody by měly být
protected
Editoval David Kudera (10. 7. 2014 18:57)
- filip.bartos
- Člen | 7
Díky za odpověď, pokud form vykreslím čistě přes {control saveForm}, tak se formulář odešle i zpracuje správně. Pokud ho však vykreslím podle ukázky, nefunguje. Problém vidím v tom, že se vygeneruje form tag s prázdným atributem action:
<form action="" method="post" novalidate="">
- David Matějka
- Moderator | 6445
nikdy nevolej createComponent* metody rucne. Ke komponente se dostanes
pomoci $this['saveForm']
a pro vykresleni muzes pouzit specialni makra
{form saveForm}
<p>
{label login/}
{input login}
</p>
...
{/form}
- filip.bartos
- Člen | 7
Tohle vyřešilo můj problém, moc Ti děkuju za informaci!
matej21 napsal(a):
nikdy nevolej createComponent* metody rucne. Ke komponente se dostanes pomoci
$this['saveForm']
a pro vykresleni muzes pouzit specialni makra
{form saveForm} <p> {label login/} {input login} </p> ... {/form}