|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace think; |
|
|
|
|
|
class Build |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function run(array $build = [], $namespace = 'app', $suffix = false) |
|
|
{ |
|
|
|
|
|
$lock = APP_PATH . 'build.lock'; |
|
|
|
|
|
|
|
|
if (!is_writable($lock)) { |
|
|
if (!touch($lock)) { |
|
|
throw new Exception( |
|
|
'应用目录[' . APP_PATH . ']不可写,目录无法自动生成!<BR>请手动生成项目目录~', |
|
|
10006 |
|
|
); |
|
|
} |
|
|
|
|
|
foreach ($build as $module => $list) { |
|
|
if ('__dir__' == $module) { |
|
|
|
|
|
self::buildDir($list); |
|
|
} elseif ('__file__' == $module) { |
|
|
|
|
|
self::buildFile($list); |
|
|
} else { |
|
|
|
|
|
self::module($module, $list, $namespace, $suffix); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
unlink($lock); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected static function buildDir($list) |
|
|
{ |
|
|
foreach ($list as $dir) { |
|
|
|
|
|
!is_dir(APP_PATH . $dir) && mkdir(APP_PATH . $dir, 0755, true); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected static function buildFile($list) |
|
|
{ |
|
|
foreach ($list as $file) { |
|
|
|
|
|
if (!is_dir(APP_PATH . dirname($file))) { |
|
|
mkdir(APP_PATH . dirname($file), 0755, true); |
|
|
} |
|
|
|
|
|
|
|
|
if (!is_file(APP_PATH . $file)) { |
|
|
file_put_contents( |
|
|
APP_PATH . $file, |
|
|
'php' == pathinfo($file, PATHINFO_EXTENSION) ? "<?php\n" : '' |
|
|
); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function module($module = '', $list = [], $namespace = 'app', $suffix = false) |
|
|
{ |
|
|
$module = $module ?: ''; |
|
|
|
|
|
|
|
|
!is_dir(APP_PATH . $module) && mkdir(APP_PATH . $module); |
|
|
|
|
|
|
|
|
if (basename(RUNTIME_PATH) != $module) { |
|
|
self::buildCommon($module); |
|
|
self::buildHello($module, $namespace, $suffix); |
|
|
} |
|
|
|
|
|
|
|
|
if (empty($list)) { |
|
|
$list = [ |
|
|
'__file__' => ['config.php', 'common.php'], |
|
|
'__dir__' => ['controller', 'model', 'view'], |
|
|
]; |
|
|
} |
|
|
|
|
|
|
|
|
foreach ($list as $path => $file) { |
|
|
$modulePath = APP_PATH . $module . DS; |
|
|
|
|
|
if ('__dir__' == $path) { |
|
|
|
|
|
foreach ($file as $dir) { |
|
|
self::checkDirBuild($modulePath . $dir); |
|
|
} |
|
|
} elseif ('__file__' == $path) { |
|
|
|
|
|
foreach ($file as $name) { |
|
|
if (!is_file($modulePath . $name)) { |
|
|
file_put_contents( |
|
|
$modulePath . $name, |
|
|
'php' == pathinfo($name, PATHINFO_EXTENSION) ? "<?php\n" : '' |
|
|
); |
|
|
} |
|
|
} |
|
|
} else { |
|
|
|
|
|
foreach ($file as $val) { |
|
|
$val = trim($val); |
|
|
$filename = $modulePath . $path . DS . $val . ($suffix ? ucfirst($path) : '') . EXT; |
|
|
$space = $namespace . '\\' . ($module ? $module . '\\' : '') . $path; |
|
|
$class = $val . ($suffix ? ucfirst($path) : ''); |
|
|
|
|
|
switch ($path) { |
|
|
case 'controller': |
|
|
$content = "<?php\nnamespace {$space};\n\nclass {$class}\n{\n\n}"; |
|
|
break; |
|
|
case 'model': |
|
|
$content = "<?php\nnamespace {$space};\n\nuse think\Model;\n\nclass {$class} extends Model\n{\n\n}"; |
|
|
break; |
|
|
case 'view': |
|
|
$filename = $modulePath . $path . DS . $val . '.html'; |
|
|
self::checkDirBuild(dirname($filename)); |
|
|
$content = ''; |
|
|
break; |
|
|
default: |
|
|
|
|
|
$content = "<?php\nnamespace {$space};\n\nclass {$class}\n{\n\n}"; |
|
|
} |
|
|
|
|
|
if (!is_file($filename)) { |
|
|
file_put_contents($filename, $content); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected static function buildHello($module, $namespace, $suffix = false) |
|
|
{ |
|
|
$filename = APP_PATH . ($module ? $module . DS : '') . |
|
|
'controller' . DS . 'Index' . |
|
|
($suffix ? 'Controller' : '') . EXT; |
|
|
|
|
|
if (!is_file($filename)) { |
|
|
$module = $module ? $module . '\\' : ''; |
|
|
$suffix = $suffix ? 'Controller' : ''; |
|
|
$content = str_replace( |
|
|
['{$app}', '{$module}', '{layer}', '{$suffix}'], |
|
|
[$namespace, $module, 'controller', $suffix], |
|
|
file_get_contents(THINK_PATH . 'tpl' . DS . 'default_index.tpl') |
|
|
); |
|
|
|
|
|
self::checkDirBuild(dirname($filename)); |
|
|
file_put_contents($filename, $content); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected static function buildCommon($module) |
|
|
{ |
|
|
$config = CONF_PATH . ($module ? $module . DS : '') . 'config.php'; |
|
|
|
|
|
self::checkDirBuild(dirname($config)); |
|
|
|
|
|
if (!is_file($config)) { |
|
|
file_put_contents($config, "<?php\n//配置文件\nreturn [\n\n];"); |
|
|
} |
|
|
|
|
|
$common = APP_PATH . ($module ? $module . DS : '') . 'common.php'; |
|
|
if (!is_file($common)) file_put_contents($common, "<?php\n"); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected static function checkDirBuild($dirname) |
|
|
{ |
|
|
!is_dir($dirname) && mkdir($dirname, 0755, true); |
|
|
} |
|
|
} |
|
|
|