„beforeRender“ v komponentách
- Barvoj
- Člen | 60
Zdravím :)
Tápu v tom, jak správně ošetřit v komponentě vyjimku, která když nastane tak už nemá smysl pokračovat ve vykreslování komponenty.
Konkrétní příklad:
Snažím se psát komponenty tak, aby obsahovaly logiku pro načítání dat (z DB, Session..).
Komponenta pro potvrzení objednávky by mohla vypadat asi následovně..
class OrderSummary extends Control
{
protected $orderSession;
public __construct($orderSession)
{
$this->orderSession = $orderSession;
}
public function render()
{
$this->template->items = $this->orderSession->getItems(); // Tady dojde k chybě
}
}
Problém nastává, pokud například session vyexpiruje a metoda
getItems()
vyhodí vyjimku – řekněme
SessionException
.
V tomto případě již nedává smysl pokračovat v potvrzení objednávky a tak bych rád vyjimku odchytil a přesměroval uživatele na jinou stránku.
Jelikož se ale vyjimka stala až v metodě render
, tedy ve
chvíli kdy už začalo vykreslování stránky, nelze již uživatele
přesměrovat..
Z toho mi plyne, že metoda render
není vhodná pro operace
které mohou skončit vyjimkou (tedy právě načítání dat) a hodila by se
metoda beforeRender
kde bych mohl tyto operace provést. Ta ale
v komponentě není..
Jak tedy takovou chybu správně ošetřit? Nebo musím data komponentě předávat z vnějšku?