thinkphp是一款非常优秀的php开发框架,对于web开发的需求截然不同,考虑到模块化开发思路,thinkphp又提供了一个又一个的实用功能,其中不同模块表前缀功能甚是值得一提,也是在同一数据库中部署多个系统的开发者不能错过的功能之一。
1.为什么在同一个数据库中部署多个系统
在实际的WEB开发中,通常情况下会碰到一些需要在同一个Web应用程序中集成多个系统的情况,这些系统可能会涉及到业务的不同领域。如果将所有的系统都集成到一个应用程序中,不仅开发难度大,极其容易造成代码混乱,而且可能导致VIP死锁情况发生。如此一来,为了保证方便、高效的开发,我们需要在同一数据库中部署多个系统。
2.ThinkPHP模块化开发
ThinkPHP采用MVC架构设计,为了更好的解决我们上述问题,我们可以采用模块化开发思路。所谓模块化,就是将一个大型的应用程序拆分成若干个互相独立的模块,在模块的设计过程中,我们可以为不同的模块配备不同的数据库表前缀,来避免表名之间的冲突。
立即学习“PHP免费学习笔记(深入)”;
3.ThinkPHP模块化功能特性
ThinkPHP在模块化开发的过程中,提供了视图层、控制层、模型层等一系列应用,特别是控制层功能,可以使多个模块之间交互,互相调用,高效地完成运算,搭建成我们最终的应用程序。控制层是在MVC架构中,连接于业务逻辑层与视图层之间的一个重要部分,可谓是如鱼得水。当然,以上层次之上,还有专门为代码优化而设计的ThinkPHP路由和缓存两个实用功能。
4.ThinkPHP不同模块表前缀设置
对于同一数据库中不同模块的表前缀设置,我们只需要在模块中相应的配置文件中,添加'MODULE的前缀'_TABLE_PREFIX的全局数组变量,并将其加入到数据库配置的那个数组中即可。
$reslist=M('子目录名称/Test')->select();
其中M('')函数就是模型中的模块名称,M的第二个参数就是模块中的控制器名,select()方法用于查询数据,其中参数也可不传2. 解决方法
实例代码如下所示:
$config=array(
'DB_TYPE'=>'mysql', 'DB_HOST'=>'localhost', 'DB_USER'=>'root', 'DB_PWD'=>'', 'DB_PORT'=>3306, 'DB_NAME'=>'test2333', 'DB_PREFIX'=>'nov_', 'MODULE_ALLOW_LIST' => array('Home', 'Admin'), 'DEFAULT_MODULE' => 'Home', 'SESSION_PREFIX' => 'api_', 'LOG_RECORD'=>false, 'LOG_TYPE'=> 'Db', 'LOAD_EXT_CONFIG' => 'extconfig',
);
如果此时需要配置一个名称为“Test”的模块,并为该模块设置表前缀,则我们可以在配置文件中,添加如下全局数组变量:
'MODULE_TEST_TABLE_PREFIX' => 'tb_'
如此一来,在使用"$this->M('Test/TBid')->select();"这样的代码调用中,ThinkPHP就可以根据前缀区分不同的数据库表。