Formulář v ErrorPresenteru

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

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.logu.

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í?