一、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. MVC中处理表单提交的方式(使用html扩展方法+juqery插件)

    这里使用扩展方法来扩展基于jquery.form 插件,实现基于异步的ajax的提交方式.

  2. React JS快速开始手册

    怎样用React JS构建一个用户界面?本文将快速地给你一个React JS的概览.代码,请君移步react-starter 概念 React只有很少的API,这使得它很容易去学习与理解.当然,使用它 ...

  3. SSH整合时执行hibernate查询报错:java.lang.ClassCastException: com.ch.hibernate.Department_$$_javassist_0 cannot be cast to javassist.util.proxy

    今天在整合ssh三个框架时,有一个功能,是查询所有员工信息,且员工表和部门表是多对一的映射关系,代码能正常运行到查询得到一个List集合,但在页面展示的时候,就报异常了, java.lang.Clas ...

  4. ACM-东北大学程序设计竞赛-网络赛(2016.04.16)

    Problem: A Time limit: 1s    Mem limit: 64 MB    AC/Submission: 0/0    Discuss Back   Ranklist  Stat ...

  5. Masonry_设置比例

    [self.bgView addSubview:self.progressImageView]; [self.progressImageView mas_makeConstraints:^(MASCo ...

  6. 分页控件layui的使用

    $.getJSON( )的使用方法简介 $.getJSON( url [, data ] [, success(data, textStatus, jqXHR) ] ) url是必选参数,表示json ...

  7. Android的系统服务一览

    System_Server进程 运行在system server进程中的服务比较多,这是整个Android框架的基础 Native服务 SurfaceFlinger 这是framebuffer合成的服 ...

  8. 转载:《TypeScript 中文入门教程》 12、类型推导

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 这节介绍TypeScript里的类型推论.即,类型是在哪里如何被推断的. 基础 ...

  9. Java--通过Spring AOP进行事务管理

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. Javascript:Javascript数据类型详解

    要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功.从Javascript数据类型开始,我将对Javascript知识体 ...