对于ThinkPHP入口文件以及模块目录结构的学习
ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口。
应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的。
入口文件主要完成:
- 定义框架路径、项目路径(可选)
- 定义调试模式和应用模式(可选)
- 定义系统相关常量(可选)
- 载入框架入口文件(必须)
入口文件中支持定义的一些系统常量:
THINK_PATH | 框架目录 |
APP_PATH | 应用目录 |
RUNTIME_PATH | 应用运行时目录(可写) |
APP_DEBUG | 应用调试模式 (默认为false) |
STORAGE_TYPE | 存储类型(默认为File) |
APP_MODE |
应用模式(默认为common) |
- 入口文件中的定义:
-
// 定义应用目录
define("APP_PATH","./Apps/");
// 定义运行时目录
define("RUNTIME_PATH","./Runtime/");
// 开启调试模式
define("APP_DEBUG",True);
// 更名框架目录名称,并载入框架入口文件
require "./Think/ThinkPHP.php";
/**************************************************************************************/
应用目录结构如下:
www WEB部署目录(或者子目录)
├─index.php 应用入口文件
├─Apps 应用目录
├─Public 资源文件目录
├─Runtime 运行时目录
└─Think 框架目录
一个应用目录下面的模块目录结构,每个模块可以方便的卸载和部署,并且支持公共模块。
Application 默认应用目录(可以设置)
├─Common 公共模块(不能直接访问)
├─Home 前台模块
├─Admin 后台模块
├─... 其他更多模块
├─Runtime 默认运行时目录(可以设置)
每个模块是相对独立的,其目录结构如下:
├─Module 模块目录
│ ├─Conf 配置文件目录
│ ├─Common 公共函数目录
│ ├─Controller 控制器目录
│ ├─Model 模型目录
│ ├─Logic 逻辑目录(可选)
│ ├─Service Service目录(可选)
│ ... 更多分层目录可选
│ └─View 视图目录
/**************************************************************************************/
/**************************************************************************************/
/**************************************************************************************/
MVC封层架构:
控制器(Controller):负责用户请求的调度,和处理业务逻辑;
模型(Model):负责业务数据的处理,和与数据库的交互;
视图(View):提供了展示数据的各种方式;
/**************************************************************************************/
/**************************************************************************************/
/**************************************************************************************/
开始接触ThinkPHP框架的时候,我是先看的微米的文件夹,发现和官方的框架下文件夹不一样,由于刚刚接触,就很是困惑,就如应用目录。官方默认应该是,Application,
但是微米下却没有此文件夹,只有一个weimicms,而且在线手册上有的地方显示的是Apps为应用目录,后来在听视频教程将入口文件配置和浏览手册的时候发现了这一条:
如果你改变了项目目录(例如把Application
更改为Apps
),只需要在入口文件更改APP_PATH常量定义即可:
define("APP_PATH","./Apps/");
require "./ThinkPHP/ThinkPHP.php";
而且在视频教程和下载的3.2版本的框架的入口文件中发现没有定义APP_NAME这一代码(define("APP_NAME", "cms");),但是微米的入口文件中就存在,不明白这个定义的意义,又是在阅读手册的时候,发现了这一条:3.2版本开始无需定义APP_NAME常量,才知道原来微米使用的是3.1版本的框架,
3.1版本的手册对APP_NAME描述是这样的:APP_NAME 是指项目名称,注意APP_NAME 不要随意设置,通常是项目的目录名称,如果你的项目是直接部署在Web根目录下面的话,那么需要设置APP_NAME 为空。
我搜索了定义项目名称的用处,有一个人是这样说的:
比如。你写了个方法,这个方法输出一个url
这个url的格式是域名/模块名/xxxxx/项目名/xxxx
里面的项目名是调用这个方法的项目名
可能每次调用的项目不一样
那你直接写APP_NAME
就不用每次拿这个项目名,再拼到url里去了
/**************************************************************************************/
/**************************************************************************************/
ThinkPHP的入口文件如下:
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用入口文件
// 检测PHP环境
if(version_compare(PHP_VERSION,"5.3.0","<")) die("require PHP > 5.3.0 !");
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define("APP_DEBUG",True);
define("BIND_MODULE","user");//这一行代码是自己加上去的,它的作用是在application下创建一个user文件夹,这是一个模块,其下会自动生成同默认的Home下文件夹,
//在入口文件中绑定了这个user模块后,系统将默认访问此模块,BIND_MODULE的作用就是默认绑定前台入口;
// 定义应用目录
define("APP_PATH","./Application/");
// 引入ThinkPHP入口文件
require "./ThinkPHP/ThinkPHP.php";
// 亲^_^ 后面不需要任何代码了 就是如此简单
/**************************************************************************************/
/**************************************************************************************/
/**************************************************************************************/
微米使用的是3.1的框架,3.1的框架目录结构如下:
生成的项目目录结构和系统目录类似,包括:
目录 | 说明 |
---|---|
Common | 项目公共文件目录,一般放置项目的公共函数 |
Conf | 项目配置目录,项目所有的配置文件都放在这里 |
Lang | 项目语言包目录(可选 如果不需要多语言支持 可删除) |
Lib | 项目类库目录,通常包括Action和Model子目录 |
Tpl | 项目模板目录,支持模板主题 |
Runtime | 项目运行时目录,包括Cache(模板缓存)、Temp(数据缓存)、Data(数据目录)和Logs(日志文件)子目录,如果存在分组的话,则首先是分组目录。 |
WEB部署目录中的应用目录名为weimicms,其下的_Core文件夹(
)中的目录包括:此文件夹为项目目录,其结构和系统目录类似,
生成的项目目录结构和系统目录类似,包括:
目录 | 说明 |
---|---|
Common | 项目公共文件目录,一般放置项目的公共函数 |
Conf | 项目配置目录,项目所有的配置文件都放在这里 |
Lang | 项目语言包目录(可选 如果不需要多语言支持 可删除) |
Lib | 项目类库目录,通常包括Action和Model子目录 |
Tpl | 项目模板目录,支持模板主题 |
Runtime | 项目运行时目录,包括Cache(模板缓存)、Temp(数据缓存)、Data(数据目录)和Logs(日志文件)子目录,如果存在分组的话,则首先是分组目录。 |
微米框架是采用的ThinkPHP,入口文件如下:
<?php
header("Content-type: text/html; charset=utf-8");
ini_set("display_errors", "1");
error_reporting(E_ALL ^ E_NOTICE);
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value){
$value = is_array($value) ?
array_map("stripslashes_deep", $value) :
stripslashes($value);
return $value;
}
$_POST = array_map("stripslashes_deep", $_POST);//stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。提示:该函数可用于清理从数据库中或者从 HTML 表单中取回的数据;
$_GET = array_map("stripslashes_deep", $_GET);//array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致;
$_COOKIE = array_map("stripslashes_deep", $_COOKIE);
}
define("APP_NAME", "cms");//APP_NAME->定义项目名称;
define("CONF_PATH","./Conf/");
define("TMPL_PATH","./tpl/");
$GLOBALS["_beginTime"] = microtime(TRUE);//这个是超全局变量$GLOBALS
define("MEMORY_LIMIT_ON",function_exists("memory_get_usage"));
define("CORE","./");
if(MEMORY_LIMIT_ON) $GLOBALS["_startUseMems"] = memory_get_usage();//返回分配给 PHP 的内存量;
define("APP_PATH","./weimicms/");//APP_PATH->应用目录,此行定义应用目录;
defined("APP_PATH") or define("APP_PATH", dirname($_SERVER["SCRIPT_FILENAME"])."/");
define("RUNTIME_PATH","./Conf/logs/");//RUNTIME_FILE->应用运行时目录(可写),此行定义运行时目录;
defined("RUNTIME_PATH") or define("RUNTIME_PATH",APP_PATH."Runtime/");
define("APP_DEBUG",1);//APP_DEBUG->应用调试模式 (默认为false),开启调试模式;
defined("APP_DEBUG") or define("APP_DEBUG",false);
$runtime = defined("MODE_NAME")?"~".strtolower(MODE_NAME)."_runtime.php":"~runtime.php";
defined("RUNTIME_FILE") or define("RUNTIME_FILE",RUNTIME_PATH.$runtime);
if(!APP_DEBUG && is_file(RUNTIME_FILE)) {
require RUNTIME_FILE;
}else{
defined("THINK_PATH") or define("THINK_PATH", dirname(__FILE__)."/");//THNK_PATH->框架目录;__FILE__ :被称为PHP魔术常量,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径,dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构;
require THINK_PATH."Common/runtime.php";//更名框架目录名称,并载入框架入口文件;
}
?>
- 上一篇:没有了
- 下一篇:没有了