// +---------------------------------------------------------------------- namespace think; class Build { /** * 根据传入的 build 资料创建目录和文件 * @access public * @param array $build build 列表 * @param string $namespace 应用类库命名空间 * @param bool $suffix 类库后缀 * @return void * @throws Exception */ 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 . ']不可写,目录无法自动生成!
请手动生成项目目录~', 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); } } /** * 创建目录 * @access protected * @param array $list 目录列表 * @return void */ protected static function buildDir($list) { foreach ($list as $dir) { // 目录不存在则创建目录 !is_dir(APP_PATH . $dir) && mkdir(APP_PATH . $dir, 0755, true); } } /** * 创建文件 * @access protected * @param array $list 文件列表 * @return void */ 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) ? " ['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) ? "