Nefunkční callback formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
filip.bartos
Člen | 7
+
0
-

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
+
0
-

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
+
0
-

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
+
+1
-

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
+
0
-

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}