Formulář v ErrorPresenteru
- ne0
- Člen | 3
Prvně – myslím si, že navzdory názvu mého tématu, je Routování to správné místo k diskutování.
Co je problém:
Mám na webu formulář, třeba na sběr mailů do newsletteru. Ten zobrazuji
v @layout.latte
, tím pádem ho mám i na chybové stránce (404).
Zároveň nemám žádnou obecnou routu na <presenter>
.
Kvůli tomu získávám chybu (respektive warning, ale ten mail mě prostě nebaví):
PHP User Warning: Invalid link: No route for Error:default() in /srv/http/nette/sandbox/vendor/nette/application/src/Application/UI/Presenter.php:1069 @ http://nette/neexistujici
Jak problém reprodukovat:
Vycházím z aktuálního sandboxu (a31641f).
Přidám formulář do BasePresenter.php:
public function createComponentForm()
{
return new \Nette\Application\UI\Form;
}
Ten v @layout.latte
vykreslím pomocí
{control form}
.
Následně v RouterFactory.php
změním:
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
na:
$router[] = new Route('<action>[/<id>]', 'Homepage:default');
Pozor, chyba se projeví pouze v produkčním režimu aplikace a pouze
zapsáním výše zmíněného řádku do error.log
u.
Co s tím?
To je má otázka. Routa, která by udělala odkaz na ErrorPresenter by chybu evidentně vyřešila. Jak by ale měla vypadat? Proč by tam vlastně měla být?
Fungovalo by i nastavení manuálního action pro konkrétní formulář – ale asi bych neměl při psaní formuláře uvažovat, jestli bude v ErrorPresenteru, nebo nebude (navíc se jedná o hack).
Nepoužití formuláře na chybové stránce by určitě taky bylo řešením: sběr emailů na chybové stránce je relativně nesmyslný požadavek, ale proč bych tam nemohl mít vyhledávání?