ThinkPHP3.1基础知识快速入门

在当今众多的MVC框架中,ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,其遵循Apache2开源协议发布,自从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验及易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持。是众多PHP开发人员的首选。本文就ThinkPHP3.1基础知识做一简述。

1.目录结构

ThinkPHP最新版本可以在官方网站(http://thinkphp.cn/down/framework.html)或者Github(https://github.com/liu21st/thinkphp/downloads)下载。

把下载后的压缩文件解压到你的WEB目录(或者任何目录都可以),框架的目录结构为:

├─ThinkPHP.php 框架入口文件

├─Common 框架公共文件

├─Conf 框架配置文件

├─Extend 框架扩展目录

├─Lang 核心语言包目录

├─Lib 核心类库目录

│ ├─Behavior 核心行为类库

│ ├─Core 核心基类库

│ ├─Driver 内置驱动

│ │ ├─Cache 内置缓存驱动

│ │ ├─Db 内置数据库驱动

│ │ ├─TagLib 内置标签驱动

│ │ └─Template 内置模板引擎驱动

│ └─Template 内置模板引擎

└─Tpl 系统模板目录

注意,框架的公共入口文件ThinkPHP.php是不能直接执行的,该文件只能在项目入口文件中调用才能正常运行(后面会讲到),这是很多新手很容易犯的一个错误。

2.入口文件

在开始之前,你需要一个Web服务器和PHP运行环境,如果你暂时还没有,我们推荐使用集成开发环境WAMPServer(是一个集成了Apache、PHP和MySQL的开发套件,而且支持多个PHP版本、MySQL版本和Apache版本的切换)来使用ThinkPHP进行本地开发和测试。

接下来我们先在WEB根目录下面创建一个app子目录(这个app就是我们的项目名),然后在该目录下面创建一个index.php文件,添加一行简单的代码:

require '/ThinkPHP框架所在目录/ThinkPHP.php';

这行代码的作用就是加载ThinkPHP框架的入口文件ThinkPHP.php,这是所有基于ThinkPHP开发应用的第一步。

然后,在浏览器中访问这个入口文件。

http://localhost/app/

一般Web服务器的默认文件是index.php,所以我们可以不需要在URL地址中加上index.php。运行后我们会看到欢迎页面,

而且已经自动生成了项目目录,目录结构如下:

├─index.php 项目入口文件

├─Common 项目公共文件目录

├─Conf 项目配置目录

├─Lang 项目语言目录

├─Lib 项目类库目录

│ ├─Action Action类库目录

│ ├─Behavior 行为类库目录

│ ├─Model 模型类库目录

│ └─Widget Widget类库目录

├─Runtime 项目运行时目录

│ ├─Cache 模板缓存目录

│ ├─Data 数据缓存目录

│ ├─Logs 日志文件目录

│ └─Temp 临时缓存目录

└─Tpl 项目模板目录

如果你希望项目的入口文件移动到app目录的外面,那么只需要修改入口文件index.php的内容为:

define('APP_NAME','app');

define('APP_PATH','./app/');

require '/ThinkPHP框架所在目录/ThinkPHP.php';

APP_NAME和APP_PATH分部用于定义项目名和项目目录,项目名通常就是指项目的目录名称。

移动并修改完项目的入口文件后,我们就可以通过

http://localhost/

访问app项目了。当然你也可以在Web根目录下面创建多个子目录来部署多个项目。

3.调试模式

ThinkPHP的运行模式包括调试模式和部署模式,默认情况下是运行在部署模式下面。部署模式下面性能优先,并且尽可能少地抛出错误信息,调试模式则以除错方便优先,关闭任何缓存,而且尽可能多的抛出错误信息,所以对性能有一定的影响。部署模式采用了项目编译机制,第一次运行会对核心和项目相关文件进行编译缓存,由于编译后会影响开发过程中对配置文件、函数文件和数据库修改的生效(除非你修改后手动清空Runtime下面的缓存文件)。因此为了避免以上问题,我们强烈建议新手在使用ThinkPHP开发的过程中使用调试模式,这样可以更好的获取错误提示和避免一些不必要的问题和烦恼。

开启调试模式很简单,我们只需要在入口文件的开头加上一行常量定义代码:

define('APP_DEBUG',TRUE); // 开启调试模式

require '/ThinkPHP框架所在目录/ThinkPHP.php';

开发完成后,我们实际进行项目部署的时候,删除这行常量定义代码即可,或者改成:

define('APP_DEBUG',false); // 关闭调试模式

4.配置

每个项目都有一个独立的配置文件(位于项目目录的Conf/config.php),配置文件的定义格式均采用PHP返回数组的方式,例如:

// 项目配置文件

return array(

'配置参数' => '配置值',

// 更多配置参数

//...

);

一旦有需要,我们就可以在项目配置文件中添加相关配置项目。通常我们提到的添加配置项目,就是指在项目配置文件中添加:

'配置参数' => '配置值',

配置值可以支持包括字符串、数字、布尔值和数组在内的数据,通常我们建议配置参数均使用大写定义。如果有需要,我们还可以为项目定义其他的配置文件。

5.控制器

需要为每个模块定义一个控制器类,控制器类的命名规范是:

模块名+Action.class.php (模块名采用驼峰法并且首字母大写)

系统的默认模块是Index,对应的控制器就是项目目录下面的Lib/Action/IndexAction.class.php,类名和文件名一致。默认操作是index,也就是控制器的一个public方法。初次生成项目目录结构的时候,系统已经默认生成了一个默认控制器(就是之前看到的欢迎页面),我们把index方法改成下面的代码:

class IndexAction extends Action {

public function index(){

echo 'hello,world!';

}

}

控制器必须继承Action类,一个模块可以包括多个操作方法。如果你的操作方法是protected或者private类型的话,是无法直接通过URL访问到该操作的。

6.URL请求

入口文件是项目的单一入口,对项目的所有请求都定向到项目的入口文件,系统会从URL参数中解析当前请求的模块和操作,我们之前访问的URL地址中没有任何参数,因此系统会访问默认模块(Index)的默认操作(index),因此下面的访问和之前是等效的:

http://localhost/app/index.php/Index/index

这种URL模式就是系统默认的PATHINFO模式,不同的URL模式获取模块和操作的方法不同,ThinkPHP支持的URL模式有四种:普通模式、PATHINFO、REWRITE和兼容模式。

普通模式:也就是传统的GET传参方式来指定当前访问的模块和操作,例如:

http://localhost/app/?m=module&a=action&var=value

m参数表示模块,a操作表示操作(模块和操作的URL参数名称是可以配置的),后面的表示其他GET参数。

PATHINFO模式:是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应上面的URL模式,PATHINFO模式下面的URL访问地址是:

http://localhost/app/index.php/module/action/var/value/

PATHINFO地址的第一个参数表示模块,第二个参数表示操作。

PATHINFO模式下面,URL是可定制的,例如,通过下面的配置:

'URL_PATHINFO_DEPR'=>'-', // 更改PATHINFO参数分隔符

我们还可以支持下面的URL访问:

http://localhost/app/index.php/module-action-var-value/

REWRITE模式:是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。

如果是Apache则需要在入口文件的同级添加.htaccess文件,内容如下:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

接下来,就可以用下面的URL地址访问了:

http://localhost/app/module/action/var/value/

兼容模式:是用于不支持PATHINFO的特殊环境,URL地址是:

http://localhost/app/?s=/module/action/var/value/

兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。

7.视图

ThinkPHP内置了一个编译型模板引擎,也支持原生的PHP模板,并且还提供了包括Smarty在内的模板引擎驱动。和Smarty不同,ThinkPHP在渲染模板的时候如果不指定模板,则会采用系统默认的定位规则,其定义规范是 Tpl/模块名/操作名.html,所以,Index模块的index操作的默认模板文件位于项目目录下面的Tpl/Index/index.html。

例如:

hello {$name}

hello, {$name}!

要输出视图,必须在控制器方法中进行模板渲染输出操作,例如:

class IndexAction extends Action {

public function index(){

$this->name = 'thinkphp'; // 进行模板变量赋值

$this->display();

}

}

display方法中我们没有指定任何模板,所以按照系统默认的规则输出了Index/index.html模板文件。

接下来,我们在浏览器中输入

http://localhost/app/

浏览器中会输出

hello,thinkphp!

8.读取数据

在开始之前,我们首先在数据库thinkphp中创建一个think_data数据表(以mysql数据库为例):

CREATE TABLE IF NOT EXISTS `think_data` (

`id` int(8) unsigned NOT NULL AUTO_INCREMENT,

`data` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

INSERT INTO `think_data` (`id`, `data`) VALUES

(1, 'thinkphp'),

(2, 'php'),

(3, 'framework');

如果我们需要读取数据库中的数据,就需要在项目配置文件中添加数据库连接信息如下:

// 添加数据库配置信息

'DB_TYPE' => 'mysql', // 数据库类型

'DB_HOST' => 'localhost', // 服务器地址

'DB_NAME' => 'thinkphp', // 数据库名

'DB_USER' => 'root', // 用户名

'DB_PWD' => '', // 密码

'DB_PORT' => 3306, // 端口

'DB_PREFIX' => 'think_', // 数据库表前缀

或者采用如下配置

'DB_DSN' => 'mysql://root@localhost:3306/thinkphp'

使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:

数据库类型://用户名:密码@数据库地址:数据库端口/数据库名

如果两种配置参数同时存在的话,DB_DSN配置参数优先。

接下来,我们修改下控制器方法,添加读取数据的代码:

class IndexAction extends Action {

public function index(){

$Data = M('Data'); // 实例化Data数据模型

$this->data = $Data->select();

$this->display();

}

}

这里用到了M函数,是ThinkPHP内置的实例化模型的方法,而且用M方法实例化模型不需要创建对应的模型类,你可以理解为M方法是直接在操作底层的Model类,而Model类具备基本的CURD操作方法。

M('Data') 实例化后,就可以对think_data数据表(think_ 是我们在项目配置文件中定义的数据表前缀)进行操作(包括CURD)了,M函数的用法还有很多,我们以后会深入了解。

定义好控制器后,我们修改模板文件,添加数据输出标签如下:

Select Data

{$vo.id}--{$vo.data}

volist标签是内置模板引擎用于输出数据集的标签。{$vo.id} 和 {$vo.data} 的用法和Smarty类似,就是用于输出数据的字段,这里就表示输出think_data表的id和data字段的值。

我们访问

http://localhost/app/

会输出

1--thinkphp

2--php

3--framework

如果发生错误,检查你是否开启了调试模式或者清空Runtime目录下面的缓存文件。如果你看到了上面的输出结果,那么至此你已经掌握了ThinkPHP入门的基础知识!

总结:

本篇我们学习了ThinkPHP的目录结构、URL模式,如何创建项目的入口文件和开启调试模式,以及控制器、模板和模型的基础认识。相关阅读:

总结IOS中nil、Nil、NULL和NSNull区别

MySQL中SELECT+UPDATE处理并发更新问题解决方案分享

C#实现Socket通信的解决方法

Win10专业版/家庭版怎么使用Windows To Go功能?

Jquery attr("checked") 返回checked或undefined 获取选中失效

分享一个2014年圣诞节倒计时页面特效

windowsxp设置经典关机界面方法介绍

JSON.stringify转换JSON时日期时间不准确的解决方法

浅谈javascript中基本包装类型

Ajax中responseText返回的是一个页面而不是一个值

C#简单的向量用法实例教程

jQuery扁平化风格下拉框美化插件FancySelect使用指南

JavaScript设计模式之单件模式介绍

轻松实现javascript数据双向绑定

thinkph 上花院 生多行mysql_PHP_ThinkPHP3.1基础知识快速入门,在当今众多的MVC框架中,ThinkPH - phpStudy...相关推荐

  1. thinkph 上花院 生多行mysql_MySQL主从复制

    CentOS7下安装MySQL,参考:https://www.cnblogs.com/silentdoer/articles/7258232.html 环境配置: Master操作: 1.接入mysq ...

  2. 【生信】基因组学相关基础知识2

    [生信]基因组学相关基础知识2 本文图片来源网络或学术论文,文字部分来源网络与学术论文,仅供学习使用. 目录 [生信]基因组学相关基础知识2 9.细胞增殖与分化的定义和区别 10.有丝分裂与减数分裂 ...

  3. python大神和小白代码_看大神6行代码如何带领小白快速入门Python爬虫?

    原标题:看大神6行代码如何带领小白快速入门Python爬虫? 可能是小编本身就有一定的基础!当然我没有瞧不起小白的看法,知识觉得要入门一门编程语言确实比较简单,而且小编本身也是从小白过来的,但是当初接 ...

  4. 计算机软件的基本概念七上,七年级信息技术课件——计算机与信息技术基础知识...

    <七年级信息技术课件--计算机与信息技术基础知识>由会员分享,可在线阅读,更多相关<七年级信息技术课件--计算机与信息技术基础知识(26页珍藏版)>请在人人文库网上搜索. 1. ...

  5. 四川建院计算机应用考试试题,自考计算机基础知识100题及答案

    高等教育自学考试的考试时间慢慢临近,备考复习也越来越紧张,四川自考网蓝优悠教育中心的南充自考助手为大家精心准备了"自考计算机基础知识100题及答案"内容,希望帮助同学们做好自考备考 ...

  6. esp8266灯上电闪一下_【零知ESP8266教程】快速入门2-点亮外部LED灯

    [零知ESP8266教程]快速入门2-点亮外部LED灯 [复制链接] 一.工具原料 电脑,windows系统 ESP8266开发板 micro-usb线 LED灯1个 220Ω 电阻1个 面包板一个+ ...

  7. 生信初学者必备的基础知识

    如果你是一个生信初学者,又或者你是一个学临床的,为了发文章开始学生信,学了点数据挖掘,GEO,TCGA什么的,但是对很多专有名词不理解,对很多流程或者步骤云里雾里,可以看看这个教程:生物信息学最佳实践 ...

  8. 【文件上传漏洞-01】文件上传漏洞概述、防御以及WebShell基础知识补充

    目录 1 文件上传漏洞概述 2 文件上传漏洞防御.绕过.利用 2.1 黑白名单策略 3 WebShell基础知识补充 3.1 WebShell概述 3.2 大马与小马 1 文件上传漏洞概述 概述:文件 ...

  9. 2020行测计算机基础知识,2020年国家公务员考试中国证监会专业科目笔试考试大纲(计算机类)...

    2020年国家公务员考试中国证监会专业科目笔试考试大纲(计算机类)由国家公务员考试网整理发布.更多关于国家公务员考试,计算机笔试,国考公务员,以及公务员考试备考信息.请关注国家公务员考试网/内蒙古人事 ...

最新文章

  1. 贾扬清出任阿里巴巴开源技术委员会负责人
  2. BAT 招聘岗位 100%都考的知识,你精通了吗?
  3. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1
  4. 没有连接上aspnetdb.mdf数据库
  5. 边缘计算架构_边缘计算到底是个什么技术?边缘计算硬件架构
  6. Dalvik分析(二)
  7. 如何线程安全地遍历List:Vector、CopyOnWriteArrayList
  8. ECMA6--字符串/数组
  9. java简单编译器源代码_25行代码实现一个简单的编译器
  10. linux scp限制传输速度
  11. 开源项目:底部动作条(BottomSheet)
  12. docker安装常用组件(mysql,redis,postgres,rancher,Portainer,蝉道,JIRA,sonarqube,Confluence,pgadmin4,harbor)
  13. 【转载】聪明说话35招
  14. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_1_IO概述(概念分类)...
  15. DEVCON.EXE管理USB
  16. 三天搞定射频识别技术(三)3.1 NFC概述
  17. Windows下 Jenkins 下载、安装
  18. 基于SSM超市订单管理系统(MYSQL版)
  19. linux中创建deamon进程的三种方法
  20. 音创ktv点歌系统服务器,音创ktv点歌系统家庭版

热门文章

  1. 2021年美容师(初级)考试题及美容师(初级)找解析
  2. 物联网控制APP入门专题(二)---阿里云iot studio移动可视化功能基本操作
  3. Android 自定义控件,模仿小米秒表样式的时钟,完整代码注解
  4. 完美解决,抖音高清直播,解决服务升级中,功能暂不可用!
  5. Linux第十节——信号
  6. 包装对象、对象常用操作、继承
  7. Autojs - 打开或关闭系统代理
  8. android htc G13刷机初探
  9. 一个软件网络连接异常_飞鸽传书软件下载-飞鸽传书短信平台下载
  10. 【Matlab 常用图像处理函数 汇总】