/*** 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 :

<?phpdefine('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:

<?phpdefine('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:

<?phpdefine('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学习笔记7—多层MVC

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

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

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

  3. thinkphp学习笔记8—命名空间

    原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...

  4. Slicer学习笔记(三十一)slicer调试Markups模块

    Slicer学习笔记(三十一)slicer调试Markups模块 1.源码编译3d slicer 2.调试Markup模块 2.1.调试设置 2.2.进入调试 2.3.通过上述一顿操作,我可以学到什么 ...

  5. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)

    Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...

  6. PyTorch学习笔记(三):PyTorch主要组成模块

    往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...

  7. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

  8. Java学习笔记_15 项目实战之天天酷跑(二):开始游戏界面

    前文,我们完成了登录界面的搭建.本文将完成开始游戏界面的搭建,并建立起登录界面与开始游戏界面的桥梁. 实现在输对用户名和密码后即可进入开始游戏界面的功能. 界面功能需求图: 具体要求: 当鼠标移入开始 ...

  9. Java学习笔记_16 项目实战之天天酷跑(三):缓冲加载游戏界面

    前文,我们完成了开始游戏界面的搭建.本文将实现缓冲加载界面的搭建.并搭建与前面俩界面间的桥梁. 实现输入正确用户名密码后,进入开始游戏界面,点击开始游戏按钮后,进入缓冲加载界面的功能. 界面示意图: ...

最新文章

  1. 汉语是世界上唯一一种面向对象的高级语言
  2. mongodb 备份和恢复
  3. 在指定的查找范围内获取DOM元素
  4. vMware安装Ghost操作系统
  5. 安装OpenCV:OpenCV 2.4.8或OpenCV 2.4.9 +VS 开发环境配置
  6. Python中map()函数浅析
  7. Spring入门第二十五课
  8. [资源]推荐一些Python书籍和教程,入门和进阶的都有!
  9. 变了,iPhone 12变身iPhone 4模样;下一代只支持单种5G频段?
  10. python批量删除_Python批量删除只保留最近几天table的代码实例
  11. 排列组合 “n个球放入m个盒子“里,再来一遍
  12. addressof表达式不能转换为long_【C语言】03-数据类型、运算符与表达式
  13. 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash
  14. 在Pycharm中,全文搜索、替换,以及单独文件搜索、替换!
  15. Android应用各个开放平台市场
  16. 知识:在遥远的海王星和天王星内部,居然会下钻石雨。
  17. 战疫玫瑰织大白,阳光妈妈暖心怀
  18. 零基础Unity做一个中秋诗词鉴赏网页,提前祝您中秋快乐!(DoTween动画 | WebGL视频 | 大文件上传GitHub)
  19. 南京航空航天大学矩阵论答案
  20. [ Linux ] 查看并修改时区

热门文章

  1. OpenGL延迟着色之二
  2. C++统计10亿以内所有的质素(素数)的实现算法(附完整源码)
  3. C++ Opengl 多重纹理源码
  4. docker 和挂载文件一起打包成新镜像_Docker文件系统和数据卷
  5. python 400集大型视频下载_Python400集大型视频,无偿分享,从正确方向学习python...
  6. 「Apollo」class DescriptorBase(metaclass=DescriptorMetaclass)
  7. python 标准差内数据概率怎么求_Python-统计概率
  8. linux内存free低,Linux上的内存使用情况与`free`不匹配
  9. gba徽章机器人_徽章战士GBA攻略
  10. Qt学习笔记之网络和连接