Example #1
0
 /**
  * @param bool $rebuild
  * @return RouteMap
  */
 public static function instance($rebuild = false)
 {
     return Cache::load('routes', function () {
         $lookup = [];
         // todo: add support for optional centralized routes
         foreach (Directory::search(BRAMBLE_DIR . '/Controllers', Directory::R_PHP, [Directory::R_HIDDEN]) as $file) {
             $controller_name = sprintf('%s\\%s', BRAMBLE_NS, substr(substr($file, strlen(BRAMBLE_DIR) + 1), 0, -4));
             $reflection_class = new \ReflectionClass($controller_name);
             if (!$reflection_class->isAbstract()) {
                 $controller = new $controller_name(Request::get());
                 if (!$controller instanceof Controller) {
                     throw new \Exception('Only controllers are allowed in this directory');
                 }
                 foreach ($controller->routes() as $route) {
                     $route->defaults(['controller' => $controller_name]);
                     $route->compile($lookup);
                 }
             }
         }
         return new self($lookup);
     }, $rebuild);
 }