标题:Thinkphp 3.2.3 零基础入门教程-耗时27天自学总结 项目及模块篇

-------------------------------------------------------------------------------------------------------------------------------

时间:2018/1/27 16:37:02

-------------------------------------------------------------------------------------------------------------------------------

内容:

 前言


本教程适合已经学习过html基础并且有php基数的人员

当你可以用php加mysql 写出一套简单的博客系统 实现,会员注册 可以可以开始学习本教程

word版本在百度文库中

https://wenku.baidu.com/view/50b522227dd184254b35eefdc8d376eeaeaa179f


之前使用php写网站犹如使用砖头一块块的盖房子 速度快,适合小型项目

而使用框架来写网站犹如使用钢结来盖房子 速度也快,适合大型项目多人同时开发



Thinkphp入门教程-1

By cotine@hexun

 

 

教程及源码地址

 

 

虽然thinkphp的最新是5.0,但是3.2.3 的帮助文件最全 推荐入门使用该版本

 

文本教程,入门开发手册

https://www.kancloud.cn/manual/thinkphp/1678

 

视频教程基本原理

https://www.imooc.com/video/5171

 

框架代码下载地址

http://www.thinkphp.cn/down/610.html

 

下载后解压到网站根目录下的tp文件夹 既可以通过以下网址访问

http://localhost/tp/index.php

 

 

Thinkphp框架的目录结构

 

tp文件夹中有若干文件夹,其中最重要是/tp/thinkphp/文件夹,涵盖了thinkphp框架的所有文件,内含6个子文件夹

 

/tp/thinkphp/common{

functions.php thinkphp框架自定义函数 MVC相关, 自定义函数function CTI dump,M,D,U,若干次使用,了解一些

}

 

/tp/thinkphp/conf{

convention.php 为配置, URL后缀 ,database 配置,cookie配置, 密码编码格式,多次使用,重点了解

}

 

/tp/thinkphp/lang{

系统提示语言 有简体繁体中文 调试出错会使用,一次使用,了解就行

}

/tp/thinkphp/tpl{模板文件 视图模板}

/tp/thinkphp/library{

里面由多个子文件夹,think业务模块函数字符串处理session处理啊,vendor3方模块,behavior放系统动作模块,了解就行

}

 

 

 

使用Thinkphp框架创建新项目

 

项目的入口网址是http://localhost/tp/index.php   对应的是/tp/index.php这个文件,里面指定了默认项目的文件夹路径,我们可以通过修改这个路径使用一个不存在的文件夹来创建 新的项目 ,就可以通过index.php访问这个基于thinkphp框架下的新项目

// 定义创建一个新项目名称为 APP

define('APP_NAME','APP'); //非必填项

define('APP_PATH','./APP/'); //指定项目文件夹路径,不存在则创建新项目,

// 引用ThinkPHP框架的入口文件

require './ThinkPHP/ThinkPHP.php';  //初始化thinkphp ,引用框架中的函数,文件结构以及默认配置参数

 

访问入口网址后,会生成一个文件夹APP,所有项目的文件都/tp/app/下,它和index.php同一路径下

 

如果入口文件中define('APP_PATH','./www/') 则项目所有文件位于/tp/www

 

如没有在入口文件中指定项目路径 则路径为跟目录,既/tp/

 

 

 

创建新的项目的目录结构

新生成的项目文件夹./App/ 下里面有3个文件夹,

/tp/app/Common{

子文件conf, [

项目配置文件,继承框架中的/tp/thinkphp/conf/convention.php中系统默认配置,也可以修改config.php 创建新的配置内容,比如数据账号密码,URL模式,网址默认后缀名称;

]

子文件夹common[

函数库文件,继承框架中/tp/htinkphp/common/functions.php 中框架函数也可以创建functions.php来自定义函数

重点了解,多次使用

]

 {

 

 

/tp/app/Runtime{

编译后的文件和缓冲文件,cache是模板的缓存;data是数据的目录;temp放数据缓存

基本了解,不会使用

}

/tp/app/Home{

            文件夹介绍[

项目的默认模块,一个项目可以包含若干模块,每一个模块可以使用自有的自定义函数库functions同时继承项目的functions以及框架functions;每个模块也可以设置独立的配置文件config.php同时可以继承项目以及框架的配置从而单独配置自己的数据库 url编码及其他内容

 

为什么要创建多个模块,并且可以保持高度独立, 对网站不同使用人群可以创建不同的模块,例如前台普通用户的业务处理使用home模块,后台管理员用户的业务处理用admin 模块,因为2者业务逻辑 需要接触的数据库以及对数据的权限完全不一样 2者分离更好。

 

通过localhost/tp/index.php?m=home&c=index&a=index访问home这个模块,可以复制并重命名为admin生成新的模块admin,改完记得改控制器indexAction.class.php第一行命名空间既可以创建和访问admin模块

localhost/tp/index.php?m=admin&c=index&a=index

]

 

子文件夹controller[

项目模块中的控制器,相当于人的大脑,所有URL访问像指令一样汇聚在控制中,通过URL的拆解分成不同的模块下的控制器中动作来完成, 里面的indexController.class.php既是上面URL中的c=index 我们也可以重新命名来创建新的控制器,还需要修改控制器文件中的class名称对应文件名称,则修改urlc参数可以访问在这个index控制器中我们有多个方法,如function index (){}对应a=index同理可以增加新的functions 来通过新的url来访问

 固我们的主要工作文件夹就在这里

非常重点,主要使用

]

 

子文件夹common[

项目模块的自定义函数文件夹向上继承了模块和框架的自定义函数,也可以创建单独functions.php写一些公共函数function show(){ echo hello world;} 就可以在控制器中的方法中使用show();这个函数来输出了

需要掌握 偶尔修改

 

]

 

子文件夹conf[

项目模块的配置参数文件夹向上继承了模块和框架的系统参数块,也可以创建单独的配置文件夹config.php 使用不一样的数据库或者不同权限的数据库用户名

需要掌握 有时修改

 

]

 

 

子文件夹Model[

项目模块的数据模块,一般一张数据表会创建一个数据模块,例如要操作数据表user 就要创建一个UserModel.class.php的文件,就可以在控制其中的方法以$user=M(‘user’) 来结合配置文件config.php实例化一个数据库对象如果数据表示blog_user 可以要创建BlogUserModel.class  ,里面写命名空间和类的声明即可

需要掌握 有时修改

]

 

子文件夹View[

项目模块的模板文件,一个控制器要创建一个单独的文件夹,控制器的方法是模板的文件夹名,例如希望在index控制器l类中的login方法来使用模板,可以要创建/view/index/login.html   

重点了解 经常修改

]

 

 

}

 

 

用户请求URLlocalhost/tp/index.php,运行顺序是/app/home/control/下的control控制模块通过分析URL,分解到/app/ 下的model模块/app/model-name/中,模块通过control传入的参数,带入模块后,去执行命令或者计算数据,最后通过视图/app/home/view/呈现出来)

 

 

创建的新项目的运行过程

用户访问网址localhost/tp/index.php首先会运行入口文件index.php

先加载文件中的App_path 变量,及文件中的require 的文件thinkphp/thinkphp.php 框架入口文件

这个框架入口文件定义了4个重要的path

App_path

Runtime_php

Think_path

Lib_path

以及依据4path定位了其他的系统文件path

 

App_path入口文件index.php没有定义则会以tp文件夹为目录,直接生成CommonRuntime以及Home 3个文件夹既/tp/Common,/tp/Runtime,/tp/Home;如果定义了app_path 路径为./app/,则生成/tp/app/Common,/tp/app/Runtime,tp/app/Home;

Runtime_path  基于在已经定义 App_path来定义的

Think_path   根据框架入口文件thinkphp.php所在路径来的;

Lib_path    根据think_path来的,既/tp/thinkphp/library/

 

app文件夹下为例

首先请求的是control文件夹

也就是app---home---controller

里面的控制器类indexController.class.php文件中

public function index(){

        代码块

}

中放的就是看的内容 可以换成echo test 就可以看到新内容

 

 

localhost/tp/index.php

 这个网址其实等价于

localhost/tp/index.php?m=home&c=index&a=index&user=cotine&blog=hexun

 

 

 

 

其中

m app_path下的home文件夹-/tp/home/model 模块

c app_path下的home文件夹下controller文件夹下的php文件

--/tp/home/controller/indexController.class.php, controller控制器类

a上面php文件里面的函数代码,写在indexController.class.php里面的class类下的方法 action-public function index(){{echo “hellow wolrd”;},action 方法函数,

其他都是参数user=cotine, blog=hexun

以上3者区分

m 文件夹-home

c文件夹下的php文件-home/controller/indexController.Class.php class名称

aphp文件里面的代码function代码块 public function index

 

 

 

新建或修改模块model-admin

模块是文件夹,默认是项目文件夹下的home

复制/tp/app/下的home文件夹,重命名为admin

修改admin文件夹/Controller/下的入口文件indexController.class.php第一行

namespace

namespace Home/Controller

改为

namespace Admin/Controller

 

既改文件夹下和文件夹下的控制器文件中模块名称

/tp/app//admin/controller/indexController.class.php public function index(){}中加上 一行 echo “<br>this is from new model-admin”;

既可以通过

/tp/index.php?m=admin&c=index&a=index

访问这个模块了 并且看到我们的新修改的文字this is from new model-admin

目的:如前面所述,每个模块可以独立的权限和数据操纵对象,方便并行开发

 

 

新建或修改控制器control-login

控制器是文件,是项目文件下模块文件下

/tp/amdin/controller/IndexController.class.php

 

复制再粘贴/tp/app/admin/controller/文件夹下的IndexController.class.php

重命名为LoginController.class.php

 

修改这个php文件 LoginController.class.php

把里面的类

class IndexController extends Controller {

改为

class LoginController extends Controller {

 

既修改IndexController.class.php文件的名称和里面的class名称

 

 

/tp/app//admin/controller/loginController.class.php public function index(){}中加上 一行 echo “<br>this is from new controller-login”;

 

可以通过

/tp/index.php?m=admin&c=login&a=index

访问这个控制器 可以看到我的提示 this is from new controller-login

目的:将不同的业务进行分组,例如登录类,删除类,查找类,注册类,每一类都包含类似的动作方法functions,不过实际运用中,都增加方法,很少增加类

 

 

 

 前言


本教程适合已经学习过html基础并且有php基数的人员

当你可以用php加mysql 写出一套简单的博客系统 实现,会员注册 可以可以开始学习本教程

word版本在百度文库中

https://wenku.baidu.com/view/50b522227dd184254b35eefdc8d376eeaeaa179f


之前使用php写网站犹如使用砖头一块块的盖房子 速度快,适合小型项目

而使用框架来写网站犹如使用钢结来盖房子 速度也快,适合大型项目多人同时开发



Thinkphp入门教程-1

By cotine@hexun

 

 

教程及源码地址

 

 

虽然thinkphp的最新是5.0,但是3.2.3 的帮助文件最全 推荐入门使用该版本

 

文本教程,入门开发手册

https://www.kancloud.cn/manual/thinkphp/1678

 

视频教程基本原理

https://www.imooc.com/video/5171

 

框架代码下载地址

http://www.thinkphp.cn/down/610.html

 

下载后解压到网站根目录下的tp文件夹 既可以通过以下网址访问

http://localhost/tp/index.php

 

 

Thinkphp框架的目录结构

 

tp文件夹中有若干文件夹,其中最重要是/tp/thinkphp/文件夹,涵盖了thinkphp框架的所有文件,内含6个子文件夹

 

/tp/thinkphp/common{

functions.php thinkphp框架自定义函数 MVC相关, 自定义函数function CTI dump,M,D,U,若干次使用,了解一些

}

 

/tp/thinkphp/conf{

convention.php 为配置, URL后缀 ,database 配置,cookie配置, 密码编码格式,多次使用,重点了解

}

 

/tp/thinkphp/lang{

系统提示语言 有简体繁体中文 调试出错会使用,一次使用,了解就行

}

/tp/thinkphp/tpl{模板文件 视图模板}

/tp/thinkphp/library{

里面由多个子文件夹,think业务模块函数字符串处理session处理啊,vendor3方模块,behavior放系统动作模块,了解就行

}

 

 

 

使用Thinkphp框架创建新项目

 

项目的入口网址是http://localhost/tp/index.php   对应的是/tp/index.php这个文件,里面指定了默认项目的文件夹路径,我们可以通过修改这个路径使用一个不存在的文件夹来创建 新的项目 ,就可以通过index.php访问这个基于thinkphp框架下的新项目

// 定义创建一个新项目名称为 APP

define('APP_NAME','APP'); //非必填项

define('APP_PATH','./APP/'); //指定项目文件夹路径,不存在则创建新项目,

// 引用ThinkPHP框架的入口文件

require './ThinkPHP/ThinkPHP.php';  //初始化thinkphp ,引用框架中的函数,文件结构以及默认配置参数

 

访问入口网址后,会生成一个文件夹APP,所有项目的文件都/tp/app/下,它和index.php同一路径下

 

如果入口文件中define('APP_PATH','./www/') 则项目所有文件位于/tp/www

 

如没有在入口文件中指定项目路径 则路径为跟目录,既/tp/

 

 

 

创建新的项目的目录结构

新生成的项目文件夹./App/ 下里面有3个文件夹,

/tp/app/Common{

子文件conf, [

项目配置文件,继承框架中的/tp/thinkphp/conf/convention.php中系统默认配置,也可以修改config.php 创建新的配置内容,比如数据账号密码,URL模式,网址默认后缀名称;

]

子文件夹common[

函数库文件,继承框架中/tp/htinkphp/common/functions.php 中框架函数也可以创建functions.php来自定义函数

重点了解,多次使用

]

 {

 

 

/tp/app/Runtime{

编译后的文件和缓冲文件,cache是模板的缓存;data是数据的目录;temp放数据缓存

基本了解,不会使用

}

/tp/app/Home{

            文件夹介绍[

项目的默认模块,一个项目可以包含若干模块,每一个模块可以使用自有的自定义函数库functions同时继承项目的functions以及框架functions;每个模块也可以设置独立的配置文件config.php同时可以继承项目以及框架的配置从而单独配置自己的数据库 url编码及其他内容

 

为什么要创建多个模块,并且可以保持高度独立, 对网站不同使用人群可以创建不同的模块,例如前台普通用户的业务处理使用home模块,后台管理员用户的业务处理用admin 模块,因为2者业务逻辑 需要接触的数据库以及对数据的权限完全不一样 2者分离更好。

 

通过localhost/tp/index.php?m=home&c=index&a=index访问home这个模块,可以复制并重命名为admin生成新的模块admin,改完记得改控制器indexAction.class.php第一行命名空间既可以创建和访问admin模块

localhost/tp/index.php?m=admin&c=index&a=index

]

 

子文件夹controller[

项目模块中的控制器,相当于人的大脑,所有URL访问像指令一样汇聚在控制中,通过URL的拆解分成不同的模块下的控制器中动作来完成, 里面的indexController.class.php既是上面URL中的c=index 我们也可以重新命名来创建新的控制器,还需要修改控制器文件中的class名称对应文件名称,则修改urlc参数可以访问在这个index控制器中我们有多个方法,如function index (){}对应a=index同理可以增加新的functions 来通过新的url来访问

 固我们的主要工作文件夹就在这里

非常重点,主要使用

]

 

子文件夹common[

项目模块的自定义函数文件夹向上继承了模块和框架的自定义函数,也可以创建单独functions.php写一些公共函数function show(){ echo hello world;} 就可以在控制器中的方法中使用show();这个函数来输出了

需要掌握 偶尔修改

 

]

 

子文件夹conf[

项目模块的配置参数文件夹向上继承了模块和框架的系统参数块,也可以创建单独的配置文件夹config.php 使用不一样的数据库或者不同权限的数据库用户名

需要掌握 有时修改

 

]

 

 

子文件夹Model[

项目模块的数据模块,一般一张数据表会创建一个数据模块,例如要操作数据表user 就要创建一个UserModel.class.php的文件,就可以在控制其中的方法以$user=M(‘user’) 来结合配置文件config.php实例化一个数据库对象如果数据表示blog_user 可以要创建BlogUserModel.class  ,里面写命名空间和类的声明即可

需要掌握 有时修改

]

 

子文件夹View[

项目模块的模板文件,一个控制器要创建一个单独的文件夹,控制器的方法是模板的文件夹名,例如希望在index控制器l类中的login方法来使用模板,可以要创建/view/index/login.html   

重点了解 经常修改

]

 

 

}

 

 

用户请求URLlocalhost/tp/index.php,运行顺序是/app/home/control/下的control控制模块通过分析URL,分解到/app/ 下的model模块/app/model-name/中,模块通过control传入的参数,带入模块后,去执行命令或者计算数据,最后通过视图/app/home/view/呈现出来)

 

 

创建的新项目的运行过程

用户访问网址localhost/tp/index.php首先会运行入口文件index.php

先加载文件中的App_path 变量,及文件中的require 的文件thinkphp/thinkphp.php 框架入口文件

这个框架入口文件定义了4个重要的path

App_path

Runtime_php

Think_path

Lib_path

以及依据4path定位了其他的系统文件path

 

App_path入口文件index.php没有定义则会以tp文件夹为目录,直接生成CommonRuntime以及Home 3个文件夹既/tp/Common,/tp/Runtime,/tp/Home;如果定义了app_path 路径为./app/,则生成/tp/app/Common,/tp/app/Runtime,tp/app/Home;

Runtime_path  基于在已经定义 App_path来定义的

Think_path   根据框架入口文件thinkphp.php所在路径来的;

Lib_path    根据think_path来的,既/tp/thinkphp/library/

 

app文件夹下为例

首先请求的是control文件夹

也就是app---home---controller

里面的控制器类indexController.class.php文件中

public function index(){

        代码块

}

中放的就是看的内容 可以换成echo test 就可以看到新内容

 

 

localhost/tp/index.php

 这个网址其实等价于

localhost/tp/index.php?m=home&c=index&a=index&user=cotine&blog=hexun

 

 

 

 

其中

m app_path下的home文件夹-/tp/home/model 模块

c app_path下的home文件夹下controller文件夹下的php文件

--/tp/home/controller/indexController.class.php, controller控制器类

a上面php文件里面的函数代码,写在indexController.class.php里面的class类下的方法 action-public function index(){{echo “hellow wolrd”;},action 方法函数,

其他都是参数user=cotine, blog=hexun

以上3者区分

m 文件夹-home

c文件夹下的php文件-home/controller/indexController.Class.php class名称

aphp文件里面的代码function代码块 public function index

 

 

 

新建或修改模块model-admin

模块是文件夹,默认是项目文件夹下的home

复制/tp/app/下的home文件夹,重命名为admin

修改admin文件夹/Controller/下的入口文件indexController.class.php第一行

namespace

namespace Home/Controller

改为

namespace Admin/Controller

 

既改文件夹下和文件夹下的控制器文件中模块名称

/tp/app//admin/controller/indexController.class.php public function index(){}中加上 一行 echo “<br>this is from new model-admin”;

既可以通过

/tp/index.php?m=admin&c=index&a=index

访问这个模块了 并且看到我们的新修改的文字this is from new model-admin

目的:如前面所述,每个模块可以独立的权限和数据操纵对象,方便并行开发

 

 

新建或修改控制器control-login

控制器是文件,是项目文件下模块文件下

/tp/amdin/controller/IndexController.class.php

 

复制再粘贴/tp/app/admin/controller/文件夹下的IndexController.class.php

重命名为LoginController.class.php

 

修改这个php文件 LoginController.class.php

把里面的类

class IndexController extends Controller {

改为

class LoginController extends Controller {

 

既修改IndexController.class.php文件的名称和里面的class名称

 

 

/tp/app//admin/controller/loginController.class.php public function index(){}中加上 一行 echo “<br>this is from new controller-login”;

 

可以通过

/tp/index.php?m=admin&c=login&a=index

访问这个控制器 可以看到我的提示 this is from new controller-login

目的:将不同的业务进行分组,例如登录类,删除类,查找类,注册类,每一类都包含类似的动作方法functions,不过实际运用中,都增加方法,很少增加类