Formulář v komponentě, neodesílá se

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

Můj první dotaz. Prosím o radu. Vím, že něco dělám špatně, ale co to nevím. Formulář nemá ACTION a nikam se neodešle a nezpracuje se. Pročetl jsem formum předem i zadem.

Díky moc.

<?php

namespace Todo;

use Nette;
use Nette\Application\UI\Form;


class FormToBasket extends Nette\Application\UI\Control {



    public function __construct() {
        parent::__construct();
    }


    public function render() {
        $this->template->setFile(__DIR__ . '/FormToBasket.latte');
        $form = new Form();
        $form->addText("count")
                ->setValue(1);
        $form->addSubmit("submit","ok");
        $form->onSuccess[] = $this->insertToBasket;

        $this->template->form = $form;



        $this->template->render();
    }

    public function insertToBasket() {

        //.....zpracování formuláře
        $this->presenter->flashMessage('Zboží bylo vloženo do košíku.', 'success');
    $this->redirect('this');
    }

}
?>
Jan Mikeš
Člen | 771
+
0
-

Toto by ti melo fungovat:

<?php
namespace Todo;

use Nette;
use Nette\Application\UI\Form;


class FormToBasket extends Nette\Application\UI\Control {

	public function __construct() {
		parent::__construct();
	}

	public function render() {
		$this->template->setFile(__DIR__ . '/FormToBasket.latte');
		$this->template->render();
 	}

	public function insertToBasket() {
		//.....zpracování formuláře
		$this->presenter->flashMessage('Zboží bylo vloženo do košíku.', 'success');
		$this->redirect('this'); // Chybi $this->presenter nebo zamer?
	}

	protected function createComponentBasketForm(){
		$form = new Form();
		$form->addText("count")->setValue(1);
		$form->addSubmit("submit","ok");
		$form->onSuccess[] = $this->insertToBasket;
		return $form;
	}

}
?>

Vykresleni pak v FormToBasket.latte pomoci {control basketForm} nebo pri manualnim renderovani pouzij makro {form basketForm}

Edit: Jedna se skoro o stejne chovani jako u formularu v presenteru, toto by ti mohlo do zacatku pomoci – formular je potreba vytvorit tovarnou, ne jej natvrdo predavat do sablony

Editoval Lexi (18. 3. 2013 23:10)

batko
Člen | 219
+
0
-

Děkuju moc.

<?php

$this->redirect($this->presenter);

?>

tohle mi hází error: strpos() expects parameter 1 to be string, object given

Jinak jsem to konečně pochopil :-) Děkuju

Jan Mikeš
Člen | 771
+
0
-

Ma tam byt

$this->presenter->redirect("Presenter:action"); // Presenter:action si nahrad za "this"

U flash message jsi to mel spravne, ale u redirectu jsi to zapomnel ;).

Editoval Lexi (18. 3. 2013 23:27)

batko
Člen | 219
+
0
-

FUNGUJE! Opravdu moc děkuju.

Jan Mikeš
Člen | 771
+
0
-

Neni zac.