Route: Autoload: %core.lib_dir%/routing/GamesLobbyStaticPageRoutingCallback.class.php Callback: class MyProjectStaticPageRoutingCallback extends AgaviRoutingCallback { public function onMatched(array &$parameters, AgaviExecutionContainer $container) { if (isset($parameters['page'])) $page = $parameters['page']; else return false; // Recognize the page's URL, fetch its ID and pass it back as a parameter to action ShowStaticPage $m = $this->context->getModel('Pages', 'Public'); if ($page_object = $m->lookupPageBySlum($page)) { $parameters['page'] = $page_object; return true; } return false; // page doesn't exist, so the route doesn't match } } Action is empty View: class Public_ShowStaticPageSuccessView extends ProjectBaseView { public function executeHtml(AgaviRequestDataHolder $rd) { $this->setupHtml($rd); $page = $this->getAttribute('page'); $layer = $this->getLayer('content'); $layer->setTemplate($page->getTemplate()); } }