Browse Source

refactoring the autoloader.

Taylor Otwell 12 years ago
parent
commit
d44c076ebf

+ 0 - 0
application/classes/.gitignore → application/libraries/.gitignore


+ 0 - 0
application/models/.gitignore


+ 21 - 50
laravel/autoloader.php

@@ -2,37 +2,19 @@
 
 class Autoloader {
 
-	/**
-	 * The class alises defined for the application.
-	 *
-	 * @var array
-	 */
-	protected $aliases = array();
-
 	/**
 	 * The PSR-0 compliant libraries registered with the auto-loader.
 	 *
 	 * @var array
 	 */
-	protected $libraries = array();
+	protected static $libraries = array();
 
 	/**
 	 * The paths to be searched by the auto-loader.
 	 *
 	 * @var array
 	 */
-	protected $paths = array(BASE_PATH, CLASS_PATH);
-
-	/**
-	 * Create a new auto-loader instance.
-	 *
-	 * @param  array  $aliases
-	 * @return void
-	 */
-	public function __construct($aliases = array())
-	{
-		$this->aliases = $aliases;
-	}
+	protected static $paths = array(BASE_PATH, MODEL_PATH, LIBRARY_PATH);
 
 	/**
 	 * Load the file corresponding to a given class.
@@ -40,30 +22,30 @@ class Autoloader {
 	 * @param  string  $class
 	 * @return void
 	 */
-	public function load($class)
+	public static function load($class)
 	{
-		// Most of the core classes are aliases for convenient access in spite
-		// of the namespace. If an alias is defined for the class, we will load
-		// the alias and bail out of the auto-load method.
-		if (array_key_exists($class, $this->aliases))
+		// Most of the core classes are aliases for convenient access in spite of
+		// the namespace. If an alias is defined for the class, we will load the
+		// alias and bail out of the auto-load method.
+		if (array_key_exists($class, Config::$items['application']['aliases']))
 		{
-			return class_alias($this->aliases[$class], $class);
+			return class_alias(Config::$items['application']['aliases'][$class], $class);
 		}
 
 		$file = str_replace('\\', '/', $class);
 
 		$namespace = substr($class, 0, strpos($class, '\\'));
 
-		// If the class namespace exists in the libraries array, it means that
-		// the library is PSR-0 compliant, and we will load it following those
-		// standards. This allows us to add many third-party libraries to an
-		// application and be able to auto-load them automatically.
-		if (array_key_exists($namespace, $this->libraries))
+		// If the class namespace exists in the libraries array, it means that the
+		// library is PSR-0 compliant, and we will load it following those standards.
+		// This allows us to add many third-party libraries to an application and be
+		// able to auto-load them automatically.
+		if (array_key_exists($namespace, static::$libraries))
 		{
-			require CLASS_PATH.$this->psr($file);
+			require LIBRARY_PATH.str_replace('_', '/', $file);
 		}
 
-		foreach ($this->paths as $path)
+		foreach (static::$paths as $path)
 		{
 			if (file_exists($path = $path.strtolower($file).EXT))
 			{
@@ -73,26 +55,15 @@ class Autoloader {
 			}
 		}
 
-		// If the namespace exists in the classes directory, we will assume the
-		// library is PSR-0 compliant, and will add the namespace to the array
-		// of libraries and load the class accordingly.
-		if (is_dir(CLASS_PATH.$namespace))
+		// If the namespace exists in the libraries directory, we will assume the
+		// library is PSR-0 compliant, and will add the namespace to the array of
+		// libraries and load the class accordingly.
+		if (is_dir(LIBRARY_PATH.$namespace))
 		{
-			$this->libraries[] = $namespace;
+			static::$libraries[] = $namespace;
 
-			require CLASS_PATH.$this->psr($file);
+			require LIBRARY_PATH.str_replace('_', '/', $file);
 		}
 	}
 
-	/**
-	 * Format a path for PSR-0 compliant auto-loading.
-	 *
-	 * @param  string  $file
-	 * @return string
-	 */
-	protected function psr($file)
-	{
-		return str_replace('_', '/', $file);
-	}
-
 }

+ 2 - 1
laravel/bootstrap/constants.php

@@ -26,11 +26,12 @@ unset($application, $public, $storage, $laravel);
 
 $constants = array(
 	'CACHE_PATH'      => STORAGE_PATH.'cache/',
-	'CLASS_PATH'      => APP_PATH.'classes/',
 	'CONFIG_PATH'     => APP_PATH.'config/',
 	'CONTROLLER_PATH' => APP_PATH.'controllers/',
 	'DATABASE_PATH'   => STORAGE_PATH.'database/',
 	'LANG_PATH'       => APP_PATH.'language/',
+	'LIBRARY_PATH'    => APP_PATH.'libraries/',
+	'MODEL_PATH'      => APP_PATH.'models/',
 	'ROUTE_PATH'      => APP_PATH.'routes/',
 	'SESSION_PATH'    => STORAGE_PATH.'sessions/',
 	'SYS_CONFIG_PATH' => SYS_PATH.'config/',

+ 1 - 1
laravel/bootstrap/core.php

@@ -14,7 +14,7 @@ Config::load('session');
 
 IoC::bootstrap();
 
-spl_autoload_register(array(IoC::container()->core('autoloader'), 'load'));
+spl_autoload_register(array('Laravel\\Autoloader', 'load'));
 
 function e($value)
 {