Více vyhovujících rout – priorita routy

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

Dobrý den,
chtěl bych aby statické soubory (latte soubory ve StaticPresenteru) měly url ve tvaru /staticky-soubor, /o-nas, apod. a zároveň abych měl co nejjednodušší konfiguraci routeru, moje představa je takováto:

<?php
  $router = new RouteList();

  // staticke soubory
  $router[] = new Route('/<action>', array(
    'module' => 'Front',
    'presenter' => 'Static'
  ));

  // defaultni routa
  $router[] = new Route('/<presenter>[/<action>][/<id>]', array(
    'module' => 'Front',
    'presenter' => 'Default',
    'action' => 'default'
  ));

  return $router;
?>

Jde nějak dosáhnout toho, aby se první routa použila pouze v případě že StaticPresenteru obsahuje odpovídající action a aplikace nekončila exceptionou Nette\Application\BadRequestException #404 v případě že se snažím dostat třeba na UserPresenter ve FrontModule (URL /user).

Díky
Radek

Jan Tvrdík
Nette guru | 2595
+
+2
-

Pěkná otázka. Můžeš např. definovat v první routě filtry pro action a vrátit NULL pokud neexistuje odpovídající Latte soubor.

Extraneus
Člen | 5
+
0
-

Díky za odpověď :)

Filtr (FIlTER_TABLE + FILTER_STRICT) pro mě není řešením (ty statické latte šablony můžou přídávat redaktoři) a bez změny routru by to nefungovalo :( Takže jediné rozumné řešení je vytvořit si vlastní router který zkustí zjistit jestli šablona existuje nebo vrátí NULL?

P.S.: Nedalo by se něco takového co jsem chtěl v původním dotazu zaimplementovat do nějaké budoucí verze Nette? :)

David Matějka
Moderator | 6445
+
0
-

@JanTvrdík mel na mysli FILTER_IN, coz je funkce, ktera pokud vrati NULL, tak to zamitne routu

Extraneus
Člen | 5
+
0
-

Aha, dekuju… to me nenapadlo :)