ThinkPHP 3.2.3 多模块应用的配置

多模块

在 ThinkPHP 3.2.3 中,默认的应用目录是 ./Application,下面的默认模块是 Home 模块,如果此时需要添加一个 Admin 模块用于后台应用,根据手册 http://www.kancloud.cn/manual/thinkphp/1696 中 “自动生成模块目录” 的部分的说明,在默认的入口文件 ./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 方法。

另外一种配置就是多入口设计(参见手册 http://www.kancloud.cn/manual/thinkphp/1696),即在默认入口文件 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 控制器。

时间: 2024-10-22 14:19:14

ThinkPHP 3.2.3 多模块应用的配置的相关文章

Thinkphp学习回顾(二)之config.php的配置

常见配置项 <? return array( //'配置项'=>'配置值''TMPL_L_DELIM'=>'<{', //修改左定界符,防止其与js中的代码重合,发生造成问题'TMPL_R_DELIM'=>'}>', //修改右定界符(重点)'DB_PREFIX'=>'tp_',//设置数据库表前缀便于管理分类(重点)'DB_DSN'=>'mysql://root:@localhost:3306/thinkphp3',/*使用DSN配置链接数据库信息(重点)

zend framework多模块多Layout配置

转自: http://blog.csdn.net/a82168506/article/details/10228011 上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资料,为了避免此种情况再次发生,做个记录吧. 首先,我们要新建一个ZF项目,目录结构如下. 我们想要配置多模块呢,首先要在,application下面建一个modules文件夹,然后

nginx图片过滤处理模块http_image_filter_module安装配置笔记

nginx图片过滤处理模块http_image_filter_module安装配置笔记 http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建议使用. 安装还是很简单的,默认HttpImageFilterModule模块是不会编译进ngi

【ThinkPHP】解析ThinkPHP5创建模块

在根目录下有一个build.php文件,该文件是自动生成的,自动创建模块.build.php的文件内容如下: <?php return [ // 生成应用公共文件 '__file__' => ['common.php', 'config.php', 'database.php'], // 定义demo模块的自动生成 (按照实际定义的文件名生成) 'demo' => [ '__file__' => ['common.php'], '__dir__' => ['behavior'

Ubuntu Server 14.04 Apache2.4 虚拟主机配置 以及 模块重写的配置

环境:Ubuntu Server 14.04 Apache2.4 1.虚拟主机配置 在apache2.4中,虚拟主机的目录是通过/etc/apache2/sites-available中配置的,默认情况下,apache有一个默认的虚拟主机文件叫000-default.conf.我们将会复制000-default.conf文件内容到我们新的虚拟主机配置文件中. sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/si

node.js平台下Express的session与cookie模块包的配置

首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等. npm install express-session --save-dev cookie模块包:用于解析cookie. npm install cookie-parser --save-dev 接着在app.js(我在node.js的配置中提到的,也就是服务器主文件)中配置: var session = require("express-session"); var cookie = require(&qu

关于httpd 2.x,mod_auth_mysql模块的安装配置以及对aes加密的支持

前言 在之前的一篇博文<Apache httpd2.2版本以及2.4版本部分实验>的实验二里面,提到了协议认证使用了mod_auth_mysql.so模块,本文将阐述该模块的安装,配置,以及对于aes加密特性的支持. 基于开发者文档的安装步骤 注:在笔者的CentOS7测试环境下并不支持aes加密 首先从模块提供的官方站点下载mod_auth_mysql-3.0.0.tar.gz,并下载对应的补丁mod_auth_mysql_3.0.0_patch_apache2.4.diff,解压缩之后,将

JBOSS EAP 6 系列六 公共模块的jar配置到jboss的modules详细配置

公司项目中遇到并要解决的问题 1:原则上除了自己写的代码之外,公共的jar不应该都在打包的时候打包到ear里面,这样的话包太大,也不符合的分层的逻辑,在jboss容器内部,每个ear的包重复jar都会调入jboss内部,而造成浪费过多地的服务器资源,会出现不定期的异常. 2:jboss eap 6.*系列,需要模块化配置,需要加载的jar,解决如何在jboss里面配置 3:公共的jar在jboss里面已经配置,加载--但是源码运行的时候不能根据maven的配置,加载jar的路径的问题 第一步:配

Python安装numpy模块及pycharm配置

查看Python版本 查看可安装模块版本 安装 进入官网下载页找到相应的whl文件下载 https://pypi.python.org/pypi/numpy 文件放于F盘 安装 测试 未报错 pycharm运行 配置 File--setting 第二步后 add local 软件关闭后,重启---运行 原文地址:https://www.cnblogs.com/hkkeryu/p/10352707.html