Předání proměnné do šablony

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

V presenteru mám následující formulář:

class MujPresenter extends BasePresenter
{
        protected function createComponentMujForm() {

                $form = new Nette\Application\AppForm;
                $form->addText("name")
		       ->addRule(Form::FILLED, 'Zadejte prosím své jméno');
                $form->addSubmit("ok", NULL);
                return $form;

		// jestliže byl formulář odeslán
                if ($form->isSubmitted()) {
                       // a jestliže jsou všechny položky vyplněny správně
                       if ($form->isValid()) {
                          $this->template->succes = 'Formulář byl úspěšně odeslán';
                       }

                }
        }

}

No a potom mám v šabloně:

{$succes}

{form mujForm}

<p class="error" n:foreach="$formErrors as $error">{$error}</p>

<p>{label name class => "big", text => "Jméno:"} {input name class => "big", size => 30}</p>
<p>{input ok text => "Odeslat formulár"}</p>

{/form}

což bohužel na stránce vyplivne tohle:

Notice: Undefined variable: succes in /data/www/domeny/skauting.cz/brodek/nette/app/temp/c-Nette.Template/_5b529658a78904de6422b7e7c03ec7dc.showform.phtml.php  on line 23

A ani po odeslání formuláře se to nezmění :-(

Tohle moje řešení je dost krkolomné, ale s Nette teprv začínám a nenapadlo mě, jak jinak se to snažit vyechovat…

Jan Endel
Člen | 1016
+
0
-

Notice je tam kvuli toho, ze pokud formular je nevalidni, promenna je neinicializovana. Jinac presne pro tve pripady se pouzivaji flashmessages

Editoval pilec (15. 6. 2010 23:25)

redhead
Člen | 1313
+
0
-

A dále máš blbě to submitování. Copak lze nějaký kód metody vykonat po returnu?

Proštuduj AppForm v dokumentaci.

Kenn
Člen | 110
+
0
-

A jinak pokud posíláš nějakou proměnnou, která je závislá na splnění podmínky, můžeš to ošetřit php funkcí isset.

toka
Člen | 253
+
0
-

Tu podmínku s $form->isSubmitted() bys měl mít v nějakém renderu. Použij raději flashMessages.