Obecná routa, která nematchne pro specifický prefix v URL

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

Rád bych měl obecnou routu, která nematchne pro specifický prefix (např. /api/) v adrese. Zkoušel jsem toto:

new Route('/<presenter (?!api)>/[<action>/[<id>/]]', 'Homepage:default');

Nicméně toto nematchne ani url, které na api nezačíná. Lze tohoto nějak snadno docílit?

mkoubik
Člen | 728
+
0
-

Dej před ní routu, která ten prefix naopak matchne, to je jednodušší.

Casper
Člen | 253
+
0
-

@mkoubik: Skutečně potřebuji, aby tato routa nematchnula.

Důvod je následující. Mám nějaké routy RESTové api (před touto) a potom tuto obecnou routu pro frontend. Rád bych, aby cokoliv co začíná na /api bylo považováno za přístup k api. Tedy i takový request, který nematchne žádnou správnou routu z těch RESTových (s danou HTTP metodou). No a protože chci vrátit RESTovou odpověď (XML, JSON, …), nesmí to matchnout žádná další routa. Nabízelo by se řešení přidat jako poslední api routu, která „sežere“ vše a vyhodí 404, nicméně v knihovně, kterou používám je správnější řešení, které vrací 405, pokud RESTový resource existuje, jen byla použita špatná metoda. Pro toto řešení je ale nutné, aby žádná routa nematchnula.

Editoval Casper (25. 6. 2015 12:37)