自动生成目录结构
ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用 hinkBuild
类库。
生成规则定义
首先需要定义一个用于自动生成的规则定义文件,通常命名为build.php
。
默认的框架的根目录下面自带了一个build.php
示例参考文件,内容如下:
return [
// 生成运行时目录
"__file__" => ["common.php"],
// 定义index模块的自动生成
"index" => [
"__file__" => ["common.php"],
"__dir__" => ["behavior", "controller", "model", "view"],
"controller" => ["Index", "Test", "UserType"],
"model" => [],
"view" => ["index/index"],
],
// 。。。 其他更多的模块定义
];
可以给每个模块定义需要自动生成的文件和目录,以及MVC类。
__dir__
表示生成目录(支持多级目录)__file__
表示生成文件(不定义默认会生成 config.php 文件)- controller 表示生成controller类
- model表示生成model类
- view表示生成html文件(支持子目录)
自动生成以APP_PATH
为起始目录,__dir__
和 __file__
表示需要自动创建目录和文件,其他的则表示为模块自动生成。
模块的自动生成则以 APP_PATH."模块名/"
为起始目录。
并且会自动生成模块的默认的Index访问控制器文件用于显示框架的欢迎页面。
我们还可以在APP_PATH
目录下面自动生成其它的文件和目录,或者增加多个模块的自动生成,例如:
return [
"__file__" => ["hello.php","test.php"],
// 定义index模块的自动生成
"index" => [
"__file__" => ["tags.php", "user.php", "hello.php"],
"__dir__" => ["behavior", "controller", "model", "view"],
"controller" => ["Index", "Test", "UserType"],
"model" => [],
"view" => ["index/index"],
],
// 定义test模块的自动生成
"test"=>[
"__dir__" => ["behavior","controller","model","widget"],
"controller"=> ["Index","Test","UserType"],
"model" => ["User","UserType"],
"view" => ["index/index","index/test"],
],
];
命令行自动生成
我们通过控制台来完成自动生成,切换到命令行,在应用的根目录输入下面命令:
>php think build
如果看到输出
Successed
则表示自动生成成功。
默认会读取应用目录application
下面的build.php
作为自动生成的定义文件,如果你的定义文件位置不同,则需要使用--config
参数指定如下:
>php think build --config build.php
表示读取根目录下的build.php
文件。
生成模块指令
>php think build --module test
表示自动生成test
模块。
添加自动生成代码
如果你不习惯命令行操作,也可以直接调用 hinkBuild
类的方法进行自动生成,例如:
// 定义应用目录
define("APP_PATH", __DIR__ . "/../application/");
// 加载框架引导文件
require __DIR__ . "/../thinkphp/start.php";
// 读取自动生成定义文件
$build = include "build.php";
// 运行自动生成
hinkBuild::run($build);
run
方法第二个参数用于指定要生成的应用类库的命名空间,默认是app
,第三个参数是设置是否需要使用类后缀。
例如:
// 定义应用目录
define("APP_PATH", __DIR__ . "/../application/");
// 加载框架引导文件
require __DIR__ . "/../thinkphp/start.php";
// 读取自动生成定义文件
$build = include "build.php";
// 运行自动生成
hinkBuild::run($build,"application",true);
可以不依赖自动生成文件,直接使用默认目录生成模块,例如:
// 定义应用目录
define("APP_PATH", __DIR__ . "/../application/");
// 加载框架引导文件
require __DIR__ . "/../thinkphp/start.php";
// 自动生成admin模块
hinkBuild::module("admin");
module
方法第二个参数和第三个参数的用法和run
方法一样。