Vlastní chybové hlášky v Presenteru

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

Potřeboval bych vypsat chybovou hlášku například „Špatné jméno nebo heslo.“. Nebo ještě jinak – přihlašovací formulář mám vlastně na každé stránce. Takže ho mám zpracovávat v BasePresenteru? Jak pak mám ale vypsat chybovou hlášku?

David Zadražil
Člen | 62
+
0
-

Musíš odchytit vyjímku od AuthenticationException.

try {

	$this->getUser()->login(...);

} catch (Nette\Security\AuthenticationException $e) {

	$form->addError($e->getMessage());
	return;

}

Editoval David Zadražil (28. 3. 2013 9:01)

Yohaku
Člen | 18
+
0
-

A kde mám toho uživatele přihlašovat? Nejspíš v BasePresenteru?

David Zadražil
Člen | 62
+
0
-

No pokud máš přihlašovací formulář „po celé aplikaci“, tedy může se přihlásit na hlavní stránce nebo v jakékoli podstránce, tak bude vhodný BasePresenter. Pokud chceš mít ale přihlašování uživatele na specifické stránce například example.com/prihlaseni tak uživatele budeš přihlašovat v PrihlaseniPresenter, záleží čistě na tom jak si to přestavuješ.

Zkus se kouknout sem. Třeba tě tam něco trkne.

Filip Procházka
Moderator | 4668
+
0
-

Předávat chyby z aplikace přímo do formuláře není vždy úplně nejlepší volba. Výjimky jsou pro vývojáře, né pro uživatele.

Tenhle postup je akceptovatelný pouze v případě, že máš v aplikaci překladový systém a pro všechny message z výjimek máš překlady do češtiny pro lidi ;)

Yohaku
Člen | 18
+
0
-

A jak bych to tedy mohl udělat bez použití výjimek?

Filip Procházka
Moderator | 4668
+
0
-

A co je špatného na podmínkách? Pusťte si raději přednášku Honzy Tvrdíka o výjimkách.

hAssassin
Člen | 293
+
0
-

@Yohaku > Filip to myslel jinak, ne nepouzit vyjimky, ale nevypisovat primo hlasku z vyjimky uzivateli. Cili pokud by se uvazoval ten kod ze zacatku, tak nejak takto:

try {
    $this->getUser()->login(...);
} catch (Nette\Security\AuthenticationException $e) {
    $form->addError('Uzivatelske jmeno a heslo neslouhlasi');
    return;
}

P.S. prednasku od Honzy musim doporucit, skvele odprednasena a velmi poucna :)

Editoval hAssassin (28. 3. 2013 11:25)

Yohaku
Člen | 18
+
0
-

Mno – já chci prostě jednoduše vypsat zprávu uživateli, když zadá špatné údaje. Rád bych se vyhnul výjimkám. Nejlépe nějak zasadit do proměnné, a v šabloně pak vypsat, jenže nevím, jak něco takového v BasePresenteru udělat.

Aurielle
Člen | 1281
+
0
-

Proč se chceš vyhýbat výjimkám?

David Zadražil
Člen | 62
+
0
-

Pokud používáš Authenticator co je defaultně v Nette (sandboxu?), tak tam jsou vyjímky použité a nevidím důvod proč je nepoužít. Můžeš si to sice upravit podle svého, ale myslím si že je to škoda.

Yohaku
Člen | 18
+
0
-

Mno, já už sandboxu (tedy celému quickstartu) nevěřím, a dělám to stylem pokus/omyl. Výjimkám se chci vyhnout hlavně proto, že to je jediná věc z OOP co pořádně nechápu.

Filip Procházka
Moderator | 4668
+
0
-

To je ten nejhorší možný přístup. Koukni na přednášku a nauč se to. http://php.net/exceptions