SuperMan

- 走向 WEB 艺术家的路程

thinkphp快速新增一个新模块

thinkphp快速新增一个新模块技巧
入口文件index.php处新增
define('BIND_MODULE','Admin');

访问以下程序就会自动生成一个admin文件夹了,包含基本核心程序文件

生成完毕之后进行代码注释


自动生成模块目录3.2.2版本开始,可以支持自动生成默认模块之外的模块目录以及批量生成控制器和模型类。
例如,如果我们需要生成一个Admin模块用于后台应用,在应用入口文件中定义如下:

  • // 绑定Admin模块到当前入口文件

  • define('BIND_MODULE','Admin');

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

然后访问URL地址

  • http://serverName/index.php

就会生成Admin模块的目录,并生成一个默认的控制器类Admin\Controller\IndexController。如果需要生成更多的控制器类,可以定义BUILD_CONTROLLER_LIST常量,例如:

  • // 绑定Admin模块到当前入口文件

  • define('BIND_MODULE','Admin');

  • define('BUILD_CONTROLLER_LIST','Index,User,Menu');

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

访问后会自动生成三个指定的控制器类:

  • Admin\Controller\IndexController

  • Admin\Controller\UserController

  • Admin\Controller\MenuController

  注意:默认生成的控制器类都是继承Think\Controller,如果需要继承其他的公共类需要另外调整。  如果在应用的公共配置文件中设置关闭了 APP_USE_NAMESPACE的话,生成的控制器类则不会采用命名空间定义。

还可以自己手动调用Think\Build类的方法来生成控制器类,例如:

  • // 生成Admin模块的Role控制器类

  • // 默认类库为Admin\Controller\RoleController

  • // 如果已经存在则不会重新生成

  • \Think\Build::buildController('Admin','Role');

同样,也可以定义BUILD_MODEL_LIST支持生成多个模型类:

  • // 绑定Admin模块到当前入口文件

  • define('BIND_MODULE','Admin');

  • define('BUILD_CONTROLLER_LIST','Index,User,Menu');

  • define('BUILD_MODEL_LIST','User,Menu');

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

访问会自动生成模型类:

  • Admin\Model\UserModel

  • Admin\Model\MenuModel

  注意:默认生成的模型类都是继承Think\Model,如果需要继承公共的模型类需要另外调整。  如果在应用的公共配置文件中设置关闭了 APP_USE_NAMESPACE的话,生成的模型类则不会采用命名空间定义。

也可以自己手动调用Think\Build类的方法来生成模型类,例如:

  • // 生成Admin模块的Role模型类

  • // 默认类库为Admin\Model\RoleModel

  • // 如果已经存在则不会重新生成

  • \Think\Build::buildModel('Admin','Role');

禁止访问模块3.2对模块的访问是自动判断的,所以通常情况下无需配置模块列表即可访问,但可以 配置禁止访问的模块列表(用于被其他模块调用或者不开放访问),默认配置中是禁止访问Common模块和Runtime模块(Runtime目录是默认的 运行时目录),我们可以增加其他的禁止访问模块列表:

  • // 设置禁止访问的模块列表

  • 'MODULE_DENY_LIST'      =>  array('Common','Runtime','Api'),

设置后,Api模块不能通过URL直接访问,事实上,可能我们只是在该模块下面放置一些公共的接口文件,因此都是内部调用即可。
设置访问列表如果你的应用下面模块比较少,还可以设置允许访问列表和默认模块,这样可以简化默认模块的URL访问。

  • 'MODULE_ALLOW_LIST'    =>    array('Home','Admin','User'),

  • 'DEFAULT_MODULE'       =>    'Home',

设置之后,除了Home、Admin和User模块之外的模块都不能被直接访问,并且Home模块是默认访问模块(可以不出现在URL地址)。
单模块设计如果你的应用够简单,那么也许仅仅用一个模块就可以完成,那么可以直接设置:

  • // 关闭多模块访问

  • 'MULTI_MODULE'          =>  false,

  • 'DEFAULT_MODULE'        =>  'Home',

一旦关闭多模块访问后,就只能访问默认模块(这里设置的是Home)。

  单模块设计后公共模块依然有效

多入口设计可以给相同的应用及模块设置多个入口,不同的入口文件可以设置不同的应用模式或者绑定模块。
例如,我们在index.php文件的同级目录新增一个home.php入口文件,并绑定Home模块:
3.2.0版本写法:

  • // 绑定Home模块到当前入口文件

  • $_GET['m'] = 'Home';

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

3.2.1以上版本写法:

  • // 绑定Home模块到当前入口文件

  • define('BIND_MODULE','Home');

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

  如果你更改了系统默认的变量设置,则需要做对应的模块绑定的变量调整。

绑定模块后,原来的访问地址

  • http://serverName/index.php/Home/Index/index

就变成

  • http://serverName/home.php/Index/index

同样的方式,我们也可以在入口文件中绑定控制器,例如:
3.2.0版本写法:

  • $_GET['m'] = 'Home'; // 绑定Home模块到当前入口文件

  • $_GET['c'] = 'Index'; // 绑定Index控制器到当前入口文件

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

3.2.1以上版本写法:

  • define('BIND_MODULE', 'Home'); // 绑定Home模块到当前入口文件

  • define('BIND_CONTROLLER','Index'); // 绑定Index控制器到当前入口文件

  • define('APP_PATH','./Application/');

  • require './ThinkPHP/ThinkPHP.php';

绑定模块和控制器后,原来的访问地址:

  • http://serverName/index.php/Home/Index/index

就变成:
http://serverName/home.php/index



注:本文转载自本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。

下一篇


评论