Jak na formularove chyby obalene ve snippetu? (Nette 2.1)

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

Ahoj,

rad bych se zeptal, jak hezky vyresit nasledujici problem:

    {form forgotPasswordForm}

        {snippet forgotPasswordFormErrors}
            {* tady promenna $form neexistuje kvuli snippetu *}
            {* Jednoducha komponenta, ktera vykresli chyby, neni dulezite jak presne se chova *}
            {control formErrors, $control->getComponent('forgotPasswordForm')->getErrors()} {* tahle radka je velmi oskliva, jde nejak pekne nahradit? *}
        {/snippet}
        <table>
                <tr>
                    <td>{label email /}</td>
                    <td>{input email}</td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        {input submit}
                    </td>
                </tr>
        </table>
    {/form}

Jak toto resite vy?
Diky

PS: Pouzivam nette.ajax.js, Nette 2.1

MartyIX
Člen | 217
+
0
-

Nikdo nevi?

akadlec
Člen | 1326
+
0
-

Proč chceš chyby vypsat pomocí komponenty?

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkusil bych, jestli nebude náhodou fungovat

{control formErrors, $form->errors}
Jiří Nápravník
Člen | 710
+
0
-

Ve snippet $form nefunguje. Dneska jsem řešil něco podobného. Pokud chceš mít ve snippetu $form, tak mi to vyřešilo nastavení v presenteru: $this->template->__form = $form; a bylo

Jinak když jsem řešil takové vypisování errorů v komponentě. Tak jsem si to udělal už v presenteru, kdy jsem vytvářel tu komponentu

	protected function createComponentFormErrors(){
		return $this->errorsFactory->create($this['form!]);
	}

a v latte pak volal jen samotnou {control formErrors}

MartyIX
Člen | 217
+
0
-

akadlec: Abych to mel vypis chyb na celem webu jednotny.

Jan Tvrdik: Jak psal Jiri Napravnik, tak toto nefunguje kvuli snippetu.

Jiri Napravnik: To udelat muzu, ale pro ctenare meho kodu by to bylo spis tezsi cteni, takze to zatim necham, jak to mam.

Diky vsem!

akadlec
Člen | 1326
+
0
-

@MartyIX: a není jednodušší si form messages předat do flash messages? Pak budeš mít výpis hlášek jednotný. Stačí jen na form pověsit akci co to překonvertuje:

// Form success calback
$form->onSuccess[] = (function() use($form) {
	// Form have some error messages
	if ( $form->hasErrors() ) {
		// Add form errors to flash messages
		foreach($form->errors as $message) {
			$form->presenter->flashMessage($message, "warning");
		}
	}
});