123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?php namespace System\Routing;
- use System\Config;
- class Loader {
-
- private static $routes;
-
- public $path;
-
- public function __construct($path)
- {
- $this->path = $path;
- }
-
- public function load($uri)
- {
- $base = (file_exists($path = $this->path.'routes'.EXT)) ? require $path : array();
- return array_merge($this->load_nested_routes(explode('/', $uri)), $base);
- }
-
- private function load_nested_routes($segments)
- {
-
-
- foreach (array_reverse($segments, true) as $key => $value)
- {
- if (file_exists($path = $this->path.'routes/'.implode('/', array_slice($segments, 0, $key + 1)).EXT))
- {
- return require $path;
- }
- }
- return array();
- }
-
- public static function all($reload = false, $path = APP_PATH)
- {
- if ( ! is_null(static::$routes) and ! $reload) return static::$routes;
-
-
-
- $paths = array_merge(array($path), array_map(function($module) { return MODULE_PATH.$module.'/'; }, Config::get('application.modules')));
- $routes = array();
- foreach ($paths as $path)
- {
- if (file_exists($path.'routes'.EXT))
- {
- $routes = array_merge($routes, require $path.'routes'.EXT);
- }
- if (is_dir($path.'routes'))
- {
-
-
- $directoryIterator = new \RecursiveDirectoryIterator($path.'routes');
- $recursiveIterator = new \RecursiveIteratorIterator($directoryIterator, \RecursiveIteratorIterator::SELF_FIRST);
- foreach ($recursiveIterator as $file)
- {
- if (filetype($file) === 'file' and strpos($file, EXT) !== false)
- {
- $routes = array_merge($routes, require $file);
- }
- }
- }
- }
- return static::$routes = $routes;
- }
- }
|