public function compile(Route $route) { $tokens = []; $source = str_replace(['/', '[', ']', '(', ')'], ['\\/', '\\[', '\\]', '\\(', '\\)'], $route->getSourceRoute()); preg_match_all('#\\{\\w+\\}#', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { $name = substr($match[0][0], 1, -1); $regexpSource = $this->predefinedRules['alnumd']; $rule = $route->getRuleByName($name); if (isset($this->predefinedRules[$rule])) { $regexpSource = $this->predefinedRules[$rule]; } elseif ($rule) { $regexpSource = $rule; } $regexp = "({$regexpSource})"; $tokens[] = ['name' => $name, 'pattern' => $regexpSource, 'placeholder' => $match[0][0]]; $source = str_replace($match[0][0], $regexp, $source); } $route->setTokens($tokens); $route->setRoute("/^{$source}\$/"); return $route; }
<?php //could use $app->route but lets use the mock Route::* instead Route::setTokens(array('format' => '(\\.[^/]+)?')); //Inbox, an inbox is a collection of messages and/or notifications streams! //Route::attachResource("/inbox", "Inbox"); //a collection of streams; //Route::attachResource("/message", "Message"); //controller should extend post; //Route::attachResource("/notification", "Notification"); // //Route::attachResource("/note", "Note"); //notes? //Route::attachResource("/event", "Event"); //multiple event types and status, e.g proposed meting //Route::attachResource("/stream", "Stream"); //collection of resources, //Route::attachResource("/person", "Person"); //persons have different roles? //Route::attachResource("/group", "Group"); //collection of persons? //Route::attachResource("/file", "File"); //collection of persons? //Protocols plugin //Route::add("/protocols{format}", "protocols", "Protocol"); //Route::attachResource("/protocol", "Protocol"); //a collection of tasks //$app->route->add("/callme", "callme") // ->setValues(array( // "action"=>function($response, $params = null)use($app){ // // //var_dump($params); // // $response->setContentType("json"); // // return $response->addContent("{j:s,o:n}"); // // }) // ); //