一、ThinkPHP的认识:

ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架。

二、下载后的目录结构:

├─ThinkPHP.php     框架入口文件

├─Common 框架公共文件

├─Conf 框架配置文件

├─Extend 框架扩展目录

├─Lang 核心语言包目录

├─Lib 核心类库目录

│  ├─Behavior 核心行为类库

│  ├─Core 核心基类库

│  ├─Driver 内置驱动

│  │  ├─Cache 内置缓存驱动

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

│  │  ├─TagLib 内置标签驱动

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

│  └─Template 内置模板引擎

└─Tpl 系统模板目录

注意,框架的公共入口文件ThinkPHP.php是不能直接执行的,该文件只能在项目入口文件中调用才能正常运行。

三、入口文件:

默认入口:public/index.php(实际部署的时候public目录为你的应用对外访问目录)。

引入入口文件:

<?php

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

?>

访问路径:http://localhost/app/

自动生成项目目录,目录结构如下:

├─index.php     项目入口文件

├─Common 项目公共文件目录

├─Conf 项目配置目录

├─Lang 项目语言目录

├─Lib 项目类库目录

│  ├─Action Action类库目录

│  ├─Behavior 行为类库目录

│  ├─Model 模型类库目录

│  └─Widget Widget类库目录

├─Runtime 项目运行时目录

│  ├─Cache 模板缓存目录

│  ├─Data 数据缓存目录

│  ├─Logs 日志文件目录

│  └─Temp 临时缓存目录

└─Tpl 项目模板目录

移动修改目录入口文件的路径:

<?php

define(‘APP_NAME’,’app’);

define(‘APP_PATH’,’./app/’);

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

?>

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

四、调试模式:

ThinkPHP的运行模式包括调试模式和部署模式,默认情况下是运行在部署模式下面。部署模式下面性能优先,并且尽可能少地抛出错误信息,调试模式则以除错方便优先,关闭任何缓存,而且尽可能多的抛出错误信息,所以对性能有一定的影响。

开启调试模式(开发完后关闭)

<?php

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

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

?>

关闭调试模式:

define(‘APP_DEBUG’,false);

五、配置文件:

配置文件位于每个项目目录的Conf/config.php,采用定义格式为php返回数组的方式。

//项目配置文件

return array{

‘配置参数’ => ‘配置值’,

//更多配置参数

//...

};

注意:

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

六、使用控制器:

控制器类的命名规范:模块名+Action.class.php(模块名采用驼峰法并且首字母大写)系统的默认模块是Index,对应的控制器就是项目目录下面的Lib/Action/IndexAction.class.php,类名和文件名一致。默认操作是index的一个public方法。

初次生成项目目录结构的时候,系统已经默认生成了一个默认控制器。

示例代码:

class IndexAction extends Action {

Public function index(){

Echo ‘hello,world’;

}

}

注意:

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

七、URL请求

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

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

这种URL模式就是系统默认的PATHINFO模式,不同的URL模式获取模块和操作的方法不同。

普通模式:也就是传统的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/

Module(第一参数)表示模块,

Action(第二参数)表示操作,

可定制方式:例如通过下面的配置:

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

还可支持

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

的URL访问。

REWRITE模式:

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

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

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

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

</IfModule>

下面的URL地址访问了:

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

兼容模式:

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

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

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

八、视图

ThinkPHP内置了一个编译型模板引擎,也支持原生的PHP模板,并且还提供了包括Smarty在内的模板引擎驱动。

和Smarty不同,ThinkPHP在渲染模板的时候如果不指定模板,则会采用系统默认的定位规则,其定义规范是TPL/模块名/操作名.html,所以,Index模块的index操作的默认模板文件位于项目目录下面的Tpl/Index/index.html。

例如:

<html>

<head>

<title>hello {$name}</title>

</head>

<body>

Hello,{$name}!

</body>

</html>

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

Class IndexAction extends Action {

public function index(){

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

$this->display();

}

}

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

接下来,我们在浏览器中输入:http://localhost/app/

浏览器中会输出: hello,thinkPHP!

九、读取数据

在开始之前,首先需在数据库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)了。

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

<html>

<head>

<title>Select Data</title>

</head>

<body>

<volist name=”data” id=”vo”>

{$vo.id}--{$vo.data}<br/>

</volist>

</body>

</html>

Volist标签是内置模板引擎用于输出数据集的标签。

{$vo.id}和{$vo.data}的用法和Smarty类似,就是用于输出数据的字段,这里就表示输出think_data表的id和data字段的值。

访问路径:http://localhost/app/

显示输出:

Thinkphp

php

Framework

注意:

如果发生错误,请检查你是否开启了调试模式或者清空Runtime目录下面的缓存文件。

总结:

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

ThinkPHP3快速入门教程-:基础的更多相关文章

  1. ThinkPHP3快速入门教程二:数据CURD

    CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...

  2. ThinkPHP3快速入门教程三:查询语言

    一.查询语言简介: ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取.更新和删除等操作,主要涉及到where方法等连贯相关方法操作即可, 此框架查询系统可以解 ...

  3. ThinkPHP3.1快速入门教程

    ThinkPHP3.1快速入门教程 http://www.thinkphp.cn/info/155.html   ------------------------------------------- ...

  4. 专为设计师而写的GitHub快速入门教程

    专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li     原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...

  5. EntityFramework6 快速入门教程

    EntityFramework6 快速入门教程 不得不说EF在国内实在是太小众,相关的技术文章真实屈指可数,而且很多文章都很旧了,里面使用的版本跟如今的EF6差别还是比较大.我刚开始弄这个的时候真是绕 ...

  6. Realm for Android快速入门教程

    介绍 如果你关注安卓开发的最新趋势,你可能已经听说过Realm.Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库. 相比SQLite,Realm更快并且具有很多现代数据库 ...

  7. .NET Core 快速入门教程

    .NET Core 快速学习.入门系列教程.这个入门系列教程主要跟大家聊聊.NET Core的前世今生,以及Windows.Linux(CentOS.Ubuntu)基础开发环境的搭建.第一个.NET ...

  8. .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)

    一.前言 本篇开发环境?1.操作系统:CentOS7(因为ken比较偏爱CentOS7)2.SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识1.了解如何通过Hyper-V安 ...

  9. MySQL 快速入门教程

    转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...

随机推荐

  1. [c++] Class

    也是醉了,一个.h文件就有这么多细节问题: 初始化列表,使用{} 也可以. 类中的引用和const变量,必须立即在初始化列表中提前初始化. 常成员函数,const 放在函数后, 常成员函数即不能改变成 ...

  2. 【TortoiseSVN使用教程】

    TortoiseSVN使用教程 TortoiseSVN是一个SVN的客户端 1.Checkout Repository        首 先要Checkout服务器端的Repository,所谓的Ch ...

  3. Java 图的遍历-LeetCode200

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  4. SQL SERVER四舍五入你除了用ROUND还有其他方法吗?

    引言 今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1))  我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四 ...

  5. block传值和代理传值的异同点

    delegate:1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理:2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始 ...

  6. [WCF编程]12.事务:Transaction类

    一.概述 .NET2.0在命名空间System.Transactions下提供了Transaction类,它表示所有.NET事务管理器使用的事务. [Serializable]public class ...

  7. 自己动手C#模拟电梯的运行V1.0

    电梯调度有很多种模式,参见http://www.cnblogs.com/jianyungsun/archive/2011/03/16/1986439.html 1.1先来先服务算法(FCFS) 先来先 ...

  8. java Io缓冲区复制文件

    //直接写代码了  类和包自己导入创建 ,手打很累的 public static void main(String args[]){ FileReader fr=null;   //文件输入流 Fil ...

  9. 【转】acm小技巧

    1.一般用c语言节约空间,要用c++库函数或STL时才用c++: cout.cin和printf.scanf最好不要混用. 大数据输入输出最后不用cin.cout,纺织超市. 2.有时候int型不够用 ...

  10. 初学C++ 之 auto关键字(IDE:VS2013)

    /*使用auto关键字,需要先赋初值,auto关键字是会根据初值来判断类型*/ auto i = ; auto j = ; cout << "auto i = 5" & ...