/**
* ThinkPHP version 3.1.3
*/

ThinkPHP ( 官方网站:http://www.thinkphp.cn/ ) 目前最新版本是 3.2.2,它要求 PHP 的版本高于 5.3.0,由于我的 WAMPServer 集成的 PHP 版本是 5.2.6,所以下载了低一版本的 ThinkPHP ( 3.1.3 ) 来学习。

下载的 ThinkPHP 的框架包解压后的结构是:

├─ThinkPHP.php 框架入口文件
├─Common 框架公共文件
├─Conf 框架配置文件
├─Extend 框架扩展目录
├─Lang 核心语言包目录
├─Lib 核心类库目录
│ ├─Behavior 核心行为类库
│ ├─Core 核心基类库
│ ├─Driver 内置驱动
│ │ ├─Cache 内置缓存驱动
│ │ ├─Db 内置数据库驱动
│ │ ├─TagLib 内置标签驱动
│ │ └─Template 内置模板引擎驱动
│ └─Template 内置模板引擎
└─Tpl 系统模板目录

在 WEB 根目录下创建项目目录 app,把框架包放至 app 目录下,然后在 app 目录下创建入口文件 index.php。

配置入口文件 index.php

<?php
define('THINK_PATH','./ThinkPHP/');
require(THINK_PATH."ThinkPHP.php");

此时通过 url 访问 index.php 文件,页面显示:

此时项目目录 APP 下内容页发生了变化,除了入口文件 index.php 和框架包,其他都是自动生成的:

每个文件夹的作用分别是:

├─index.php     项目入口文件
├─Common 项目公共文件目录
├─Conf 项目配置目录
├─Lang 项目语言目录
├─Lib 项目类库目录
│ ├─Action Action类库目录
│ ├─Behavior 行为类库目录
│ ├─Model 模型类库目录
│ └─Widget Widget类库目录
├─Runtime 项目运行时目录
│ ├─Cache 模板缓存目录
│ ├─Data 数据缓存目录
│ ├─Logs 日志文件目录
│ └─Temp 临时缓存目录
└─Tpl 项目模板目录

这种方式的入口文件 index.php 是存在项目目录之内。也可以入口文件移动到 app 目录的外面,修改入口文件 index.php :

<?php

define('THINK_PATH','./app/ThinkPHP/');
define('APP_NAME','app');
define('APP_PATH','./app/');
require(THINK_PATH."ThinkPHP.php");

目录结构:

项目的部署方式

项目的部署方式分为应用部署和模块分组部署。应用部署是每一个项目对应一个入口文件,例如前台入口文件对应 index.php,后台入口文件对应 admin.php

前台入口文件 index.php:

<?php
define('THINK_PATH','./ThinkPHP/');
define('APP_NAME','home');
define('APP_PATH','./home/');
require(THINK_PATH."ThinkPHP.php");

后台入口文件 admin.php:

<?php

define('THINK_PATH','./ThinkPHP/');
define('APP_NAME','admin');
define('APP_PATH','./admin/');
require(THINK_PATH."ThinkPHP.php");

模块分组方式是所有应用对应一个入口文件,[ 使用模块分组可以简化为一个项目目录。项目的模板文件还是放到项目的 Tpl 目录下面,只是将外部调用的资源文件, 包括图片 JS 和 CSS 统一放到网站的公共目录Public 下面,分 Images、Js 和 Css 子目录存放,如果有可能的话,甚至也可以把这些资源文件单独放一个外部的服务器远程调用,并进行优化。( 事实上,系统目录和项目目录可以放到非WEB访问目录下面,网站目录下面只需要放置 Public 公共目录和入口文件,从而提高网站的安全性。) 来源:ThinkPHP 官方文档 ]

( 图片来源:http://www.php400.cn/275.html )

模块分组方式需要配置 APP_NAME 和 APP_PATH 。

在 WEB 根目录创建项目目录 App,并且拷贝框架包 ThinkPHP 至同级目录,同时在同级创建所有项目公共资源目录 Public、所有项目公共上传目录 Uploads 以及入口文件 index.php:

index.php:

<?php

define('THINK_PATH','./ThinkPHP/');
//定义项目名称和路径
define('APP_NAME','Myapp');
define('APP_PATH','./App/');
define('APP_DEBUG',true);
//加载框架入口文件
require(THINK_PATH."ThinkPHP.php");

通过 url 访问 index.php ,初始化项目环境后,App 目录下自动生成的目录:

然后在App/Conf/config.php 配置文件中,配置分组选项:

<?php
return array(
//'配置项'=>'配置值'
'APP_GROUP_LIST'=>'Admin,Home',
'DEFAULT_GROUP'=>'Home',
);
?>

如果此时访问 index.php 入口文件,ThinkPHP 会报错:

因为在公共配置文件中开启了模块分组,但相应的分组目录并没有创建,需要手动创建 Admin 和 Home 组的各自配置文件:Conf 目录下创建 Admin 和 Home 目录,然后分别在目录中创建 config.php 配置文件;App/Lib/Action 目录也需要创建 Admin 和 Home 目录,然后将默认创建的 IndexAction.class.php 文件移动到 App/Lib/Action/Home 目录,此时访问入口文件不会报错,项目部署成功:

总结:传统的模式适合耦合度不高的项目,也是 ThinkPHP 官方推荐的方式;

模块分组方式各模块之间可以方便调用,公共资源也能够彼此利用,比较适合较大容量的项目。

参考资料:ThinkPHP 官方教程ThinkPHP 官方文档http://www.php400.cn/category/thinkphp%E6%A1%86%E6%9E%B6、《PHP MVC开发实战》

ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式的更多相关文章

  1. thinkphp学习笔记3—项目编译和调试模式

    原文:thinkphp学习笔记3-项目编译和调试模式 1.项目编译 在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并 ...

  2. Nodejs学习笔记(1) Nodejs安装+借助express模块简单部署服务器

    1 安装 1.1 下载和安装 1.2 什么是REPL?如何使用? 1.3 npm对单一模块的安装和删除功能 1.4 通过package.json自定义模块(安装模块) 1.5 设置全局目录 2 部署网 ...

  3. thinkphp学习笔记5—模块化设计

    原文:thinkphp学习笔记5-模块化设计 1.模块结构 完整的ThinkPHP用用围绕模块/控制器/操作设计,并支持多个入口文件盒多级控制.ThinkPHP默认PATHINFO模式,如下: htt ...

  4. thinkphp学习笔记4—眼花缭乱的配置

    原文:thinkphp学习笔记4-眼花缭乱的配置 1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展 ...

  5. thinkphp学习笔记7—多层MVC

    原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...

  6. thinkphp学习笔记6—url模式

    原文:thinkphp学习笔记6-url模式 入口文件是应用的唯一入口,因为可以多入口,每个应用可以对应一个入口文件,系统会从rul参数中解析当前请求的模块,控制器,操作.ThinkPHP是区分大小写 ...

  7. thinkphp学习笔记2—入口文件

    原文:thinkphp学习笔记2-入口文件 在thinkphp中有两个入口文件,一个是项目的入口文件,是index.php在主目录里面,还有一个是thinkphp框架的的入口文件,放在框架目录下面如: ...

  8. thinkphp学习笔记1—目录结构和命名规则

    原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...

  9. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

随机推荐

  1. RedHat中敲sh-copy-id命令报错:-bash: ssh-copy-id: command not found

    RedHat中敲sh-copy-id命令报错:-bash: ssh-copy-id: command not found 在多台Linux服务器SSH相互访问无需密码, 其中进入一台Linus中,对其 ...

  2. 使用jQuery简单实现产品展示的图片左右滚动功能

    今天要做一个产品展示功能,由于产品比较多,一屏展示不完,所以想要做一个通过点击进行翻页的效果,在网上找了几个都不大好用,最后只能自己动手写了. 效果如下所示: 原理比较简单:将要滚动显示的区域的CSS ...

  3. wp8 入门到精通 线程

    Dispatcher.BeginInvoke(() => MessageBox.Show(String.Format("A push notification {0} error oc ...

  4. python网页爬虫

    1. 静态页面爬取 这类最简单啦,右键->查看页面源码时,想下载的信息都能够显示在这里,这时只需要直接down页面源码,代码如下: # Simple open web import urllib ...

  5. HDU 1166 敌兵布阵 线段树

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. Java配置环境变量、方法和原因

    首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以后哪天自己忘记了做个备份 1.进入“计算机 ...

  7. 使用Spring的jdbcTemplate进一步简化JDBC操作

    先看applicationContext.xml配置文件: <?xml version="1.0" encoding="UTF-8"?> <b ...

  8. SU Demos-02Filtering-06Sukfilter

    本demo中数学原理纯粹不知道,看来以后需要抓紧时间补课了,只附图. 运行结果图如下:

  9. 计算几何 2013年山东省赛 A Rescue The Princess

    题目传送门 /* 已知一向量为(x , y) 则将它旋转θ后的坐标为(x*cosθ- y * sinθ , y*cosθ + x * sinθ) 应用到本题,x变为(xb - xa), y变为(yb ...

  10. COPIED VALUE 的本质意义

    定义一个值对象类型,使其实例是可复制的.当它用来和另一个线程通信时,确保复制该值. 此模式主要用于解决在多线程中没有必要进行同步的数据对象的传递——使用值传递方式,即可复制. 故没有加锁开销,每一个副 ...