热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3)利用Build.php自动创建目录和文件

(1)首先做法参照:thinkphp5的手册的命令行--->自动生成目录结构或者看云的资料:https:www.kancloud.cnmanualth

(1)首先做法参照:

        thinkphp5的手册的  命令行--->自动生成目录结构

        或者看云的资料:https://www.kancloud.cn/manual/thinkphp5/118021

 

(2)build.php(位于我的框架的根目录下)

                

     build.php内容展示,其实没啥变化

 1 php
2 // +----------------------------------------------------------------------
3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]
4 // +----------------------------------------------------------------------
5 // | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
6 // +----------------------------------------------------------------------
7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8 // +----------------------------------------------------------------------
9 // | Author: liu21st
10 // +----------------------------------------------------------------------
11 /**
12 * 对应那个thinkphp中的library中的think 的Build.php文件
13 */
14 return [
15 // 生成应用公共文件
16 '__file__' => ['common.php', 'config.php', 'database.php'],
17
18 // 定义demo模块的自动生成 (按照实际定义的文件名生成)
19 'demo' => [
20 '__file__' => ['common.php','config.php'],
21 '__dir__' => ['behavior', 'controller', 'model', 'view'],
22 'controller' => ['Index', 'Test', 'UserType'],
23 'model' => ['User', 'UserType'],
24 'view' => ['index/index'],
25 ],
26 // 其他更多的模块定义
27 ];

    观察可知:__file__是单独的,但是你看那个__dir__中的controler   model    view和下面的那个   controller     model    view是对应的   其实就是对应Build.php中的  建立目录   监理文件和建立模板的函数对应  

  下面是那个Build.php文件代码展示:

    

  1 php
2 // +----------------------------------------------------------------------
3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]
4 // +----------------------------------------------------------------------
5 // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
6 // +----------------------------------------------------------------------
7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8 // +----------------------------------------------------------------------
9 // | Author: liu21st
10 // +----------------------------------------------------------------------
11
12 namespace think;
13 /**
14 * 这个是我自动创建类文件,详细可以看手册的命令行--->自动生成目录结构
15 * run()方法,你传入一个配置文件的返回值,就创建一个对应的目录
16 * BuildDir()创建一个目录,传一个数组
17 *所有的参数参照build.php文件写法
18 *
19 * 可以模仿这个建立模块或者目录的函数的写法,自己再编写几个不一样的创建东西的函数。
20 * Class Build
21 * @package think
22 */
23 class Build
24 {
25 /**
26 * 根据传入的build资料创建目录和文件
27 * @access protected
28 * @param array $build build列表
29 * @param string $namespace 应用类库命名空间
30 * @param bool $suffix 类库后缀
31 * @return void
32 */
33 public static function run(array $build = [], $namespace = 'app', $suffix = false)
34 {
35 // 锁定
36 $lockfile = APP_PATH . 'build.lock';
37 if (is_writable($lockfile)) {
38 return;
39 } elseif (!touch($lockfile)) {
40 throw new Exception('应用目录[' . APP_PATH . ']不可写,目录无法自动生成!
请手动生成项目目录~
', 10006);
41 }
42 foreach ($build as $module => $list) {
43 if ('__dir__' == $module) {
44 // 创建目录列表
45 self::buildDir($list);
46 } elseif ('__file__' == $module) {
47 // 创建文件列表
48 self::buildFile($list);
49 } else {
50 // 创建模块
51 self::module($module, $list, $namespace, $suffix);
52 }
53 }
54 // 解除锁定
55 unlink($lockfile);
56 }
57
58 /**
59 * 创建目录
60 * @access protected
61 * @param array $list 目录列表
62 * @return void
63 */
64 protected static function buildDir($list)
65 {
66 foreach ($list as $dir) {
67 if (!is_dir(APP_PATH . $dir)) {
68 // 创建目录
69 mkdir(APP_PATH . $dir, 0755, true);
70 }
71 }
72 }
73
74 /**
75 * 创建文件
76 * @access protected
77 * @param array $list 文件列表
78 * @return void
79 */
80 protected static function buildFile($list)
81 {
82 foreach ($list as $file) {
83 if (!is_dir(APP_PATH . dirname($file))) {
84 // 创建目录
85 mkdir(APP_PATH . dirname($file), 0755, true);
86 }
87 if (!is_file(APP_PATH . $file)) {
88 file_put_contents(APP_PATH . $file, 'php' == pathinfo($file, PATHINFO_EXTENSION) ? "" : '');
89 }
90 }
91 }
92
93 /**
94 * 创建模块
95 * @access public
96 * @param string $module 模块名
97 * @param array $list build列表
98 * @param string $namespace 应用类库命名空间
99 * @param bool $suffix 类库后缀
100 * @return void
101 */
102 public static function module($module = '', $list = [], $namespace = 'app', $suffix = false)
103 {
104 $module = $module ? $module : '';
105 if (!is_dir(APP_PATH . $module)) {
106 // 创建模块目录
107 mkdir(APP_PATH . $module);
108 }
109 if (basename(RUNTIME_PATH) != $module) {
110 // 创建配置文件和公共文件
111 self::buildCommon($module);
112 // 创建模块的默认页面
113 self::buildHello($module, $namespace, $suffix);
114 }
115 if (empty($list)) {
116 // 创建默认的模块目录和文件
117 $list = [
118 '__file__' => ['config.php', 'common.php'],
119 '__dir__' => ['controller', 'model', 'view'],
120 ];
121 }
122 // 创建子目录和文件
123 foreach ($list as $path => $file) {
124 $modulePath = APP_PATH . $module . DS;
125 if ('__dir__' == $path) {
126 // 生成子目录
127 foreach ($file as $dir) {
128 self::checkDirBuild($modulePath . $dir);
129 }
130 } elseif ('__file__' == $path) {
131 // 生成(空白)文件
132 foreach ($file as $name) {
133 if (!is_file($modulePath . $name)) {
134 file_put_contents($modulePath . $name, 'php' == pathinfo($name, PATHINFO_EXTENSION) ? "" : '');
135 }
136 }
137 } else {
138 // 生成相关MVC文件
139 foreach ($file as $val) {
140 $val = trim($val);
141 $filename = $modulePath . $path . DS . $val . ($suffix ? ucfirst($path) : '') . EXT;
142 $space = $namespace . '\\' . ($module ? $module . '\\' : '') . $path;
143 $class = $val . ($suffix ? ucfirst($path) : '');
144 switch ($path) {
145 case 'controller': // 控制器
146 $cOntent= "";
147 break;
148 case 'model': // 模型
149 $cOntent= "";
150 break;
151 case 'view': // 视图
152 $filename = $modulePath . $path . DS . $val . '.html';
153 self::checkDirBuild(dirname($filename));
154 $cOntent= '';
155 break;
156 default:
157 // 其他文件
158 $cOntent= "";
159 }
160
161 if (!is_file($filename)) {
162 file_put_contents($filename, $content);
163 }
164 }
165 }
166 }
167 }
168
169 /**
170 * 创建模块的欢迎页面
171 * @access public
172 * @param string $module 模块名
173 * @param string $namespace 应用类库命名空间
174 * @param bool $suffix 类库后缀
175 * @return void
176 */
177 protected static function buildHello($module, $namespace, $suffix = false)
178 {
179 $filename = APP_PATH . ($module ? $module . DS : '') . 'controller' . DS . 'Index' . ($suffix ? 'Controller' : '') . EXT;
180 if (!is_file($filename)) {
181 $cOntent= file_get_contents(THINK_PATH . 'tpl' . DS . 'default_index.tpl');
182 $cOntent= str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', $suffix ? 'Controller' : ''], $content);
183 self::checkDirBuild(dirname($filename));
184 file_put_contents($filename, $content);
185 }
186 }
187
188 /**
189 * 创建模块的公共文件
190 * @access public
191 * @param string $module 模块名
192 * @return void
193 */
194 protected static function buildCommon($module)
195 {
196 $filename = CONF_PATH . ($module ? $module . DS : '') . 'config.php';
197
198 self::checkDirBuild(dirname($filename));
199 if (!is_file($filename)) {
200 file_put_contents($filename, "");
201 }
202 $filename = APP_PATH . ($module ? $module . DS : '') . 'common.php';
203 if (!is_file($filename)) {
204 file_put_contents($filename, "");
205 }
206 }
207
208 protected static function checkDirBuild($dirname)
209 {
210 if (!is_dir($dirname)) {
211 mkdir($dirname, 0755, true);
212 }
213 }
214 }

 

 

 

(3)然后在index.php文件中的写法展示:

      

 

 

 1 php
2 // +----------------------------------------------------------------------
3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]
4 // +----------------------------------------------------------------------
5 // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
6 // +----------------------------------------------------------------------
7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8 // +----------------------------------------------------------------------
9 // | Author: liu21st
10 // +----------------------------------------------------------------------
11
12 // [ 应用入口文件 ]
13 define('CONF_PATH',__DIR__.'./config/');
14 // 定义应用目录
15 define('APP_PATH', __DIR__.'./application/');
16 //define('STATIC','/Per_boke/public/static');
17 // 加载框架引导文件
18 require __DIR__.'./thinkphp/start.php';
19 /**
20 * 下面是自己定义的配置文件的目录
21 */
22 $build=include './build.php';
23 \think\Build::run($build);

 

 

详细讲解可看:http://pan.baidu.com/s/1jIx47fK      密码:hvje

 


推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 使用 Jupyter Notebook 实现 Markdown 编写与代码运行
    Jupyter Notebook 是一个开源的基于网页的应用程序,允许用户在同一文档中编写 Markdown 文本和运行多种编程语言的代码,并实时查看运行结果。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
author-avatar
建铭琼伶俊涵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有