标题:Thinkphp 3.2.3 零基础入门教程-耗时27天自学总结 项目及模块篇
-------------------------------------------------------------------------------------------------------------------------------
时间:2018/1/27 16:37:02
-------------------------------------------------------------------------------------------------------------------------------
内容:
本教程适合已经学习过html基础并且有php基数的人员
当你可以用php加mysql 写出一套简单的博客系统 实现,会员注册 可以可以开始学习本教程
word版本在百度文库中
https://wenku.baidu.com/view/50b522227dd184254b35eefdc8d376eeaeaa179f
之前使用php写网站犹如使用砖头一块块的盖房子 速度快,适合小型项目
而使用框架来写网站犹如使用钢结来盖房子 速度也快,适合大型项目多人同时开发
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文件夹中 既可以通过以下网址访问
Thinkphp框架的目录结构
在tp文件夹中有若干文件夹,其中最重要是/tp/thinkphp/文件夹,涵盖了thinkphp框架的所有文件,内含6个子文件夹
/tp/thinkphp/common{
functions.php thinkphp框架自定义函数 和MVC相关, 自定义函数function
C,T,I ,dump,M,D,U,若干次使用,了解一些
}
/tp/thinkphp/conf{
convention.php 为配置, URL后缀 ,database
配置,cookie配置, 密码编码格式,多次使用,重点了解
}
/tp/thinkphp/lang{
系统提示语言 有简体繁体中文 调试出错会使用,一次使用,了解就行
}
/tp/thinkphp/tpl{模板文件 视图模板}
/tp/thinkphp/library{
里面由多个子文件夹,think业务模块函数,字符串处理session处理啊,vendor第3方模块,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名称对应文件名称,则修改url的c参数可以访问 ,在这个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
重点了解 经常修改
]
}
用户请求URL后localhost/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
以及依据4个path定位了其他的系统文件path
App_path入口文件index.php没有定义则会以tp文件夹为目录,直接生成Common和Runtime以及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名称
a是php文件里面的代码,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,不过实际运用中,都增加方法,很少增加类