Neplatné odkazy
Pokud vytváříte odkaz na Presenter nebo subrequest, může se stát, že zapsaný odkaz nebude platný – například proto, že Presenter daného jména neexistuje, nebo proto, že požadavek nelze převést na URL atd.
Jak naložit s neplatnými odkazy určuje statická proměnná
Presenter::$invalidLinkMode. Ta může nabývat těchto hodnot
(konstant):
Presenter::INVALID_LINK_SILENT– tichý režim, jako URL se vrátí znak #Presenter::INVALID_LINK_WARNING– vizuální varování, viz dálePresenter::INVALID_LINK_EXCEPTION– vyhodí se výjimka InvalidLinkException
Výchozí nastavení je INVALID_LINK_SILENT v produkčním režimu a
INVALID_LINK_WARNING ve vývojovém. INVALID_LINK_WARNING pracuje tak, že
jako URL vrátí chybovou zprávu, která začíná znaky error:.
Aby takové odkazy byly na první pohled patrné, doplňte si do CSS:
a[href^="error:"] {
background: red;
color: white;
text-decoration: blink;
}
Když pak odkaz zapsaný například v šabloně …
<a href="{$presenter->link('Product:list', 10)}">Produkt</a>
// nebo lze i stručněji:
<a href="{link Product:list 10}">Produkt</a>
…bude neplatný, bude vypadat takto (obarvení funguje v Opeře a Firefoxu).
Konkrétní příklad
Za neplatný odkaz se považuje i volání metody presenteru
link() pokud je zavolána s parametrem, který není definovaný,
odkaz se nevygeneruje správně a presenter se zachová tak, jak má tedy
nastavena proměnná Presenter::$invalidLinkMode.
public function presentDefault($lang, $id)
{
// špatné použití - parametr není definován v definici metody
$this->link('Article:default', array($lang, $id, $undefined, 'undefined' => 'parametr'));
// správné použití - pomocí metody getParam()
$this->link('Article:default', array($lang, $id, 'undefined' => $this->getParam('undefined')));
...
}
