ThinkPHP 3.2 版本后将整个项目 APP_PATH 路径下的 Application 做为一个应用,应用下能够存在多个模块,如系统默认生成的 Common Home Admin 等php
完整Url路由模版以下ui
index.php/module/controller/action/param1/val1/param2/val2url
入口文件中的常量参数:spa
//绑定Web模块
define('BIND_MODULE', 'Web');
//绑定Site控制器
define('BIND_CONTROLLER', 'Site');
//绑定show动做
define('BIND_ACTION', 'show');调试
// 应用入口文件 // 检测PHP环境 if (version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG', true); //绑定Web模块 define('BIND_MODULE', 'Web'); //绑定Site控制器 define('BIND_CONTROLLER', 'Site'); //绑定show动做 define('BIND_ACTION', 'show'); // 定义应用目录 define('APP_PATH', './Application/'); // 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php'; // 亲^_^ 后面不须要任何代码了 就是如此简单
BIND_MODULE 会将当前入口文件与定义的 模块 严格绑定,url 中再也不存有module的占位code
index.php/controller/action/param1/val1/param2/val2路由
BIND_CONTROLLER会将当前入口文件与定义的 控制器 严格绑定,url 中再也不存有 controller 的占位开发
index.php/action/param1/val1/param2/val2部署
BIND_ACTION 会将当前入口文件与定义的 动做 严格绑定,url 中再也不存有 action 的占位it
index.php/param1/val1/param2/val2
因此若是要开启单个入口文件下的多模块访问,这几个 BIND 参数是不能够使用的
多模块的设置
默认是开启多模块的, 在入口文件中没有绑定任何模块的话 ,多模块便默认开启并有效
Common 模块中的config/config.php:
<?php return array( 'MULTI_MODULE' => true, //是否开启多模块 'DEFAULT_MODULE' => 'Web', //默认模块指定为 Web );
这里须要注意的是
DEFAULT_MODULE 默认值为 Home
DEFAULT_CONTROLLER 默认值为 Index
DEFAULT_ACTION 默认值为 index
这三个参数只有当咱们不填写路由参数直接访问 index.php 时,系统会根据默认参数路由
若是咱们填写了路由参数的话,必须按照 index.php/module/controller/action 的模式去访问
以下图:
此时若是我不写模块,则系统会把我本意为控制器做为模块处理
关闭多模块或者在入口文件中设定 BIND_MODULE 的模块值:
若是咱们关闭多模块,系统会根据 DEFAULT_MODULE 的值做为默认模块进行访问,咱们不须要也不能在 url 中填写模块名,它已经被内定了,其实就至关于在入口文件中 BIND_MODULE 为默认模块
<?php return array( 'MULTI_MODULE' => false, 'DEFAULT_MODULE' => 'Web' );
总结:
一、单模块模式:
index.php/controller/action/param1/val1/param2/val2
在入口文件中
define('BIND_MODULE', 'Web')
或者在 Common/Conf/config.php 中设定
'MULTI_MODULE' => false,
'DEFAULT_MODULE' => 'Web'
便可达到相同的效果,url中不须要也不能够填写模块名,已经被初始内定了
二、多模块模式:
index.php/module/controller/action/param1/val1/param2/val2
在入口文件中不能够 BIND 任何模块,
Common/Conf/config.php 中设定
'MULTI_MODULE' => true,
url 中须要按 module/controller/action 的模式去访问,设定的默认模块,默认控制器和默认动做能够起到默认路由的做用。