You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.1 KiB
91 lines
2.1 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\build\controllers; |
|
|
|
use yii\console\Controller; |
|
use yii\helpers\FileHelper; |
|
|
|
/** |
|
* @author Qiang Xue <qiang.xue@gmail.com> |
|
* @since 2.0 |
|
*/ |
|
class ClassmapController extends Controller |
|
{ |
|
public $defaultAction = 'create'; |
|
|
|
/** |
|
* Creates a class map for the core Yii classes. |
|
* @param string $root the root path of Yii framework. Defaults to YII_PATH. |
|
* @param string $mapFile the file to contain the class map. Defaults to YII_PATH . '/classes.php'. |
|
*/ |
|
public function actionCreate($root = null, $mapFile = null) |
|
{ |
|
if ($root === null) { |
|
$root = YII_PATH; |
|
} |
|
$root = FileHelper::normalizePath($root); |
|
if ($mapFile === null) { |
|
$mapFile = YII_PATH . '/classes.php'; |
|
} |
|
$options = array( |
|
'filter' => function ($path) { |
|
if (is_file($path)) { |
|
$file = basename($path); |
|
if ($file[0] < 'A' || $file[0] > 'Z') { |
|
return false; |
|
} |
|
} |
|
return null; |
|
}, |
|
'only' => array('.php'), |
|
'except' => array( |
|
'Yii.php', |
|
'YiiBase.php', |
|
'/debug/', |
|
'/console/', |
|
'/test/', |
|
'/gii/', |
|
), |
|
); |
|
$files = FileHelper::findFiles($root, $options); |
|
$map = array(); |
|
foreach ($files as $file) { |
|
if (($pos = strpos($file, $root)) !== 0) { |
|
die("Something wrong: $file\n"); |
|
} |
|
$path = str_replace('\\', '/', substr($file, strlen($root))); |
|
$map[$path] = "\t'yii" . substr(str_replace('/', '\\', $path), 0, -4) . "' => YII_PATH . '$path',"; |
|
} |
|
ksort($map); |
|
$map = implode("\n", $map); |
|
$output = <<<EOD |
|
<?php |
|
/** |
|
* Yii core class map. |
|
* |
|
* This file is automatically generated by the "build classmap" command under the "build" folder. |
|
* Do not modify it directly. |
|
* |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
return array( |
|
$map |
|
); |
|
|
|
EOD; |
|
if (is_file($mapFile) && file_get_contents($mapFile) === $output) { |
|
echo "Nothing changed.\n"; |
|
} else { |
|
file_put_contents($mapFile, $output); |
|
echo "Class map saved in $mapFile\n"; |
|
} |
|
} |
|
}
|
|
|