[李景山php]每天TP5-20161220|thinkphp5-build.php
2016-11-11 08:42
309 查看
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- namespace think; class Build {// 建造大师, /** * 根据传入的build资料创建目录和文件 * @access protected * @param array $build build列表 * @param string $namespace 应用类库命名空间 * @param bool $suffix 类库后缀 * @return void */ public static function run(array $build = [], $namespace = 'app', $suffix = false) {// 就是创建 文件,或者是目录 // 锁定 $lockfile = APP_PATH . 'build.lock';// 创建一个锁定文件 if (is_writable($lockfile)) {// 如果文件可以写入 返回 也就是这个文件是否存在,存在就代表 已经创建完成 // 同时这个文件 代表写入锁定,我在,你就不能写入 return; } elseif (!touch($lockfile)) {// 如果不可以创建,抛出异常 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($lockfile);// 删除 锁定文件, } /** * 创建目录 * @access protected * @param array $list 目录列表 * @return void */ protected static function buildDir($list) { foreach ($list as $dir) { if (!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) ? "<?php\n" : ''); }// 创建基础文件 } } /** * 创建模块 * @access public * @param string $module 模块名 * @param array $list build列表 * @param string $namespace 应用类库命名空间 * @param bool $suffix 类库后缀 * @return void */ public static function module($module = '', $list = [], $namespace = 'app', $suffix = false) {// 创建模块 很牛叉 // 模块名 列表 命名空间,类库后缀 $module = $module ? $module : '';// 默认 模块设置 if (!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) { if (!is_dir($modulePath . $dir)) { // 创建目录 mkdir($modulePath . $dir, 0755, true); } } } 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 { // 生成相关MVC文件 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'; if (!is_dir(dirname($filename))) { // 创建目录 mkdir(dirname($filename), 0755, true); } $content = ''; break; default: // 其他文件 $content = "<?php\nnamespace {$space};\n\nclass {$class}\n{\n\n}"; } if (!is_file($filename)) { file_put_contents($filename, $content); } }// 牛叉 } } } /** * 创建模块的欢迎页面 * @access public * @param string $module 模块名 * @param string $namespace 应用类库命名空间 * @param bool $suffix 类库后缀 * @return void */ protected static function buildHello($module, $namespace, $suffix = false) {// 从模版 创建 默认页面 $filename = APP_PATH . ($module ? $module . DS : '') . 'controller' . DS . 'Index' . ($suffix ? 'Controller' : '') . EXT; if (!is_file($filename)) { $content = file_get_contents(THINK_PATH . 'tpl' . DS . 'default_index.tpl'); $content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', $suffix ? 'Controller' : ''], $content); if (!is_dir(dirname($filename))) { mkdir(dirname($filename), 0755, true); } file_put_contents($filename, $content); } } /** * 创建模块的公共文件 * @access public * @param string $module 模块名 * @return void */ protected static function buildCommon($module) { $filename = CONF_PATH . ($module ? $module . DS : '') . 'config.php'; if (!is_file($filename)) { file_put_contents($filename, "<?php\n//配置文件\nreturn [\n\n];"); }// 创建配置文件 $filename = APP_PATH . ($module ? $module . DS : '') . 'common.php'; if (!is_file($filename)) { file_put_contents($filename, "<?php\n"); }// 创建 通过文件 } } /** * 总结: * 就是创建各种文件跟目录, * 目录容易,文件困难,尤其是模块文件, * 需要根据不同的选项 MVC 创建不同类型的文件 */
相关文章推荐
- [李景山php]每天TP5-20161220|thinkphp5-build.php
- [李景山php]每天TP5-20170119|thinkphp5-Process.php-1
- [李景山php]每天TP5-20161226|thinkphp5-Console.php-3
- [李景山php]每天TP5-20170101|thinkphp5-Debug.php
- [李景山php]每天TP5-20170106|thinkphp5-Hook.php
- [李景山php]每天TP5-20170203|thinkphp5-Request.php-6
- [李景山php]每天TP5-20161219|thinkphp5-softDelete.php
- [李景山php]每天TP5-20161222|thinkphp5-Cache.php
- [李景山php]每天TP5-20170119|thinkphp5-Process.php-1
- [李景山php]每天TP5-20161226|thinkphp5-Console.php-3
- [李景山php]每天TP5-20170101|thinkphp5-Debug.php
- [李景山php]每天TP5-20170130|thinkphp5-Request.php-2
- [李景山php]每天TP5-20170203|thinkphp5-Request.php-6
- [李景山php]每天TP5-20161221|thinkphp5-jump.php
- [李景山php]每天TP5-20161222|thinkphp5-Cache.php
- [李景山php]每天TP5-20161215|thinkphp5的程序加载运行流程【图】
- [李景山php]每天TP5-20170102|thinkphp5-Env.php
- [李景山php]每天TP5-20170130|thinkphp5-Request.php-2
- [李景山php]每天TP5-20161221|thinkphp5-jump.php
- [李景山php]每天TP5-20170115|thinkphp5-Model.php-8