Changed Yii autoloader to support loading PSR-4 classes only (i.e. PEAR-styled classes not supported anymore)

This commit is contained in:
Qiang Xue
2014-01-08 09:11:26 -05:00
parent 3902cada7f
commit e123428c94
2 changed files with 8 additions and 22 deletions

View File

@ -266,12 +266,9 @@ class BaseYii
* 2. If the class is namespaced (e.g. `yii\base\Component`), it will attempt
* to include the file associated with the corresponding path alias
* (e.g. `@yii/base/Component.php`);
* 3. If the class is named in PEAR style (e.g. `PHPUnit_Framework_TestCase`),
* it will attempt to include the file associated with the corresponding path alias
* (e.g. `@PHPUnit/Framework/TestCase.php`);
*
* This autoloader allows loading classes that follow the [PSR-0 standard](http://www.php-fig.org/psr/0/).
* Therefor a path alias has to be defined for each top-level namespace.
* This autoloader allows loading classes that follow the [PSR-4 standard](http://www.php-fig.org/psr/psr-4/)
* and have its top-level namespace defined as path aliases.
*
* @param string $className the fully qualified class name without a leading backslash "\"
* @throws UnknownClassException if the class does not exist in the class file
@ -283,25 +280,13 @@ class BaseYii
if ($classFile[0] === '@') {
$classFile = static::getAlias($classFile);
}
} else {
// follow PSR-0 to determine the class file
if (($pos = strrpos($className, '\\')) !== false) {
// namespaced class, e.g. yii\base\Component
$path = str_replace('\\', '/', substr($className, 0, $pos + 1))
. str_replace('_', '/', substr($className, $pos + 1)) . '.php';
} else {
$path = str_replace('_', '/', $className) . '.php';
}
// try loading via path alias
if (strpos($path, '/') === false) {
} elseif (strpos($className, '\\') !== false) {
$classFile = static::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
if ($classFile === false || !is_file($classFile)) {
return;
} else {
$classFile = static::getAlias('@' . $path, false);
if ($classFile === false || !is_file($classFile)) {
return;
}
}
} else {
return;
}
include($classFile);