问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Think3.2.3怎么配置多个数据库连接

发布网友 发布时间:2022-04-29 06:15

我来回答

2个回答

懂视网 时间:2022-04-29 10:37



多模块

在 ThinkPHP 3.2.3 中,默认的应用目录是 ./Application,下面的默认模块是 Home 模块,如果此时需要添加一个 Admin 模块用于后台应用,在默认的入口文件 ./index.php 中添加:

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

此时运行 http://serverNmae/index.php,会在 ./Application 目录下生成一个 Admin 模块。但是此时访问 http://serverName/index.php,实际上访问的是新添加的 Admin 模块,即使在 ./Applicaition/Common/Conf/config.php 中添加

//设置默认模块
'DEFAULT_MODULE' => 'Home'

也无法正确定位到 Home 模块。

实际上手册中提到到的在入口文件定义 BIND_MODULE 的实际含义是定义默认模块。参见:./ThinkPHP/Library/Think/Dispatcher.calss.php,该文件定义了 ThinkPHP 内置的 Dispatcher 类,用于完成 URL 解析、路由和调度(参见手册中的 ”系统流程“ 一节),其中 Line:140

// 获取模块名称
define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule));

在静态方法 dispatch 中,模块名称的获取首先会在入口文件中查询是否有定义 BIND_MODULE,如果有定义,则定义 MODULE_NAME 的值为定义的 BIND_MODULE 的值,否则调用该类中的静态私有方法 getModule 来获取实际的模块名称:

/**
 * 获得实际的模块名称
 */
 static private function getModule($var) {
 $module = (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_MODULE'));
 unset($_GET[$var]);
 if($maps = C('URL_MODULE_MAP')) {
  if(isset($maps[strtolower($module)])) {
  // 记录当前别名
  define('MODULE_ALIAS',strtolower($module));
  // 获取实际的模块名
  return ucfirst($maps[MODULE_ALIAS]);
  }elseif(array_search(strtolower($module),$maps)){
  // 禁止访问原始模块
  return '';
  }
 }
 return strip_tags(ucfirst(strtolower($module)));
 }

该方法中,如果 URL 中不包含配置文件重定义的 VAR_MODULE (默认为 m,在 ./ThinkPHP/Conf/convention.php 中)的值,则找配置文件中定义的 DEFAULT_MODULE 的值。

通过以上分析,得出 BIND_MODULE 实际上是定义默认模块,如果在项目中有多个模块的话,不要这样配置。

如果此时注释默认入口文件 ./index.php 中的 BIND_MODULE(即采用默认的入口文件配置),那么直接访问 http://serverName/admin 就可以访问 Admin 模块,因为在该入口文件中,定义了应用目录 ./Application,那么访问 http://serverName/admin 实际就是访问了 ./Application/Admin/Controller/IndexController.class.php 中的 index 方法。

ThinkPHP 3.2.3 采用这种方式配置多模块就可以了,无需在入口文件和配置文件中另作定义,这也是 ThinkPHP 官方推荐的分组模式。

另外一种配置就是多入口设计,即在默认入口文件 index.php 的同级创建 admin.php ,同时在 index.php 中添加:

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

在 admin.php 中采用和 index.php 相同的配置,除了 BIND_MODULE 的定义,将 BIND_MODULE 的定义改为:

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

然后在应用配置文件 ./Application/Common/Conf/config.php 中添加:

//设置默认模块
'DEFAULT_MODULE' => 'Home',

此时访问 http://serverName/index.php 就能访问 Home 模块,访问 http://servername/admin.php ,就能访问 Admin 模块,而无法访问 http://serverName/admin ,因为此时 index.php 只能访问 Home 模块。

多应用

通常情况下 ThinkPHP 3.2.3 无需使用多应用模式,因为大多数情况下都可以通过多模块化以及多入口的设计来解决应用的扩展需求。

如果一定要使用多应用模式,例如创建应用 Application_API,那么可以在 ./Application 同级目录下创建目录 Applicaiton_API,同时增加入口文件 ./api.php,将应用目录指向 ./Application_API:

// 定义应用目录
define('APP_PATH','./Application_API/');

注意初始情况下新增加的应用一定要有 Home 模块,即使在 ./Application_API/Common/Conf/config.php 中设置了

//设置默认模块
'DEFAULT_MODULE' => 'Api',

也许要初始有 Home 模块,否则会报错:无法加载 Index 控制器。

推荐教程:《TP5》

热心网友 时间:2022-04-29 07:45

thinkphp\common文件夹中的convention.php中是tp的核心配置文件,不能乱动,如果要想更改里面的配置,在conf
文件夹里面的config.php可以配置,可以这样写
也可以在最外边写,就是与thinkphp框架同一目录中写一个config.php文件,格式如同上面的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 做凉皮加什么劲道 梦见自己生了个小孩是瘸子 孕妇梦见生了三胞胎,有一个男孩是个哑巴 我昨晚梦见我的孩子生下来是哑巴!我一直想不通! 我没有结婚,梦见自己生了个女儿,长的不漂亮,而且还是个哑巴… 梦见自己生了个四五岁的哑巴儿子好吗? 用英语介绍小狗不少于6句话 帮我找一篇介绍小狗的作文 介绍小狗的作文 狗狗介绍 关于小狗的简介20字左右98 小狗的常识性介绍是什么,700字? 今天属牛打麻将的财神方位是? 请问如何介绍我家的狗狗 属牛打麻将的方位? 简单的介绍一下小狗的外貌和习性 今天属牛打麻将的最佳方位 73属牛的2021年12月4号打麻将坐哪方位最佳 邓伦高调隔空示爱,为何毫不在意姐弟恋? 2021年属牛打牌最佳方位? 求 橘子 The Oranges 百度云免费在线观看资源 手做凉皮是在工作凉皮里面要加什么才有劲道 求 橘子红了 百度云免费在线观看资源 用什么料子做凉皮更劲道 凉皮怎么做的更劲道好吃 学习凉皮调料里放什么 《金橘》百度云高清资源在线观看,连比特·乌尔夫萨克主演的 为什么橘子浏览器可以播放搜狐视频,却不可以播放优酷视频? 橘子浏览器有时候无法在线视频 求 橘子不是唯一的水果 Oranges Are Not The Only Fruit 百度云免费在线观看资源 在QQ中发视频说说,如何。。急!!! 一条QQ说说可以同时出现一张图片和一个视频吗?可以的话怎么弄? 梦见我骑自行车驮了好几包东西 梦见手抓这绳子提这自行车下楼? 梦见用绳子牵着自行车朋友在自行车上可我手里绳子滑了朋友掉下去了是什么意思? 梦见自行车掉水里了用绳子绑着解不开? 一个玉平安扣跟两颗朱砂怎么搭配 双鲤宝瓶吊坠能不能碰到水 梦见自己用自行车驮几个旧砖块? 朱砂山鬼花钱佩戴方法 梦见骑自行车意味着什么?