thinkphp
介绍
1.什么是框架
- 特征1 : 一堆代码的集合
- 特征2 : 一个半成品应用
- 特征3 :包含了一些优秀的设计模式
2.为什么要使用框架
- 不使用框架的弊端
- 每个人代码风格不一样,不便于开发和后期维护
- 一小处的修改,会牵扯出很多地方的修改
- 在后期满足客户需求(功能拓展)存在局限性
- 使用框架的好处
- 使用框架会帮助我们简单快速高效的开发项目
- 可以然能给我们有更多时间专注于业务逻辑的开发,不需要关注底层架构
- 便于处理多人协作开发中遇到的问题
3 常见的框架
- Zend Framework
是重量级框架,是php语言公司触屏的官方框架,比较臃肿,启动较慢
- YII
美国华人开发,外企应用比较多
- Symfony
重量级 国外框架
- Laravel
轻量级 国外框架
- Codelgniter
轻量级框架,简称CI框架,代码火焰。国外框架
- ThinkPhp
是一款国人开发的框架。国内普遍。适合入门级
- ……..4.MVC
- 什么是MVC
MVC是一种设计模式。他是将用户的输入、输出、逻辑相分离,将整个项目分为三个部分:
- 控制器(controller)
- 模型(Model)
- 视图(View)
======================
ThinkPHP 框架
- 1.国人自主开发,中文注释,中文文档,论坛
- 2.下载地址 http://www.thinkphp.cn/
下载步骤
第一步:
-第二步:下载经典的3.2.3版本
-第二步:自行解压
=============================================
目录结构
最外面的总体结构
Aplication目录下面的文件
Thinkphp目录下面的文件
Thinkphp –> config目录下面的文件
注意:
-
convention.php 是系统级别的配置文件。另外还有应用级别和分组级别的配置文件
-
作用范围上:
- > 系统>应用>分组
-
优先级上:
- > 分组>应用>系统
thinkphp_3.2.3_fullThinkPHPLibraryThink目录下
部署(重点)
1.配置站点目录
2.配置Apache虚拟主机的配置文件,创建一个虚拟主机
- 文件目录 :apacheconfextrahttpd-vhosts.conf
- 步骤:
- 将之前的一段站点配置代码复制 进行修改
![]()
2.重启Apache
3.修改host文件,将配置文件中申明的两个域名做一下绑定(解析)
- #### host文件位置:C:WindowsSystem32driversetchosts
![]()
————-
- #### 快速找到位置
- 1.运行 drives
- 2.运行 to hosts
————-
- #### 添加域名绑定解析
-
看是否绑定成功 在cmd中使用ping命令
-
在浏览器中查看(下图表示成功)
-
将代码文件复制到站点目录中
-(如:将thinkPHP里面的文件复制进去)为了一步步学习thinkPHP特性,我们只复制两个文件,如下图
-
再次通过浏览器查看
- ### 打开站点目录,会发现多了一个Application目录。(刚刚并没有复制进去)
- #### 生成的Application和thinkphp解压包解压出来的Application不一样
- ### Common目录下
细节问题
- ### 自动生成
- 在首次运行index.php入口文件时会自动生成相应的目录。目录的名字取决于在index.php定义的常量APP_PATH
- 如果改变的话,就会生成相应的目录。
————-
- 如果改变的话,就会生成相应的目录。
- 在首次运行index.php入口文件时会自动生成相应的目录。目录的名字取决于在index.php定义的常量APP_PATH
-
目录安全文件
- 在自动生成的目录下都会有一个空白的html文件,文件名叫做index.html.这就叫做目录安全文件
- 作用:
- 隐藏目录结构,保证安全
- 隐藏目录结构,保证安全
-
默认访问
- 默认分组/平台:Home
- 默认控制器:index
- 默认方法:index()
可以在系统配置文件中找到:WWW hinkPHP-learningThinkPHPConf
thinkPHP中控制器
-
控制器创建
-
命名规则: 控制器名(英文首字母大写)+Controller+.class.php
-
例如:
UserController.class.php
<?php #声明命名控件 namespace HomeController; #引入父类控制器 use ThinkController; #声明控制器(类)并且继承父类 class UserController extends Controller { public function test(){ } } ?>
-
-
命名空间声明和使用必须和目录挂钩
-
完善 测试
UserController.class.php
ruby
<?php
#声明命名控件
namespace HomeController;
#引入父类控制器
use ThinkController;
#声明控制器(类)并且继承父类
class UserController extends Controller {
public function test(){
echo "测试UserController.class.php成功";
}
}
-
- 根据需要,后期可添加控制器
路由形式(重点)
路由:是指访问项中具体某个方法的URL地址
四种路由形式
- 普通形式路由(get形式路由) (get-2k; post-8M)
http://网址/入口文件?m=分组名&c=控制器名&a=方法名&参数名=参数值
例如访问上述控制器的方法,并且传递一个参数 id = 1:
http://www.xingheng.com/index.php?m=Home&c=User&a=test&id=1
- 缺点:在URL暴露参数,不安全
- Pathinfo形式路由
- PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应前面的URL模式,PATHINFO模式下面的URL访问地址是:
`aidl
http://网址/入口文件/分组名/控制器/方法/参数名/参数值/
例如访问上述控制器的方法,并且传递一个参数 id = 1:
http://www.xingheng.com/index.php/Home/User/test/id/1/
`
- PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应前面的URL模式,PATHINFO模式下面的URL访问地址是:
-
Rewrite形式路由(默认)
- REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php
-
不能直接使用,需要额外配置WEB服务器的重写规则。
1.打开重写(再此文件apacheconfhttpd.conf)
-
如果是Apache则需要在入口文件的同级添加.htaccess文件
-
内容如下:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
-
“`
- 接下来就可以使用下面的URL地址访问了。
-
http://www.xingheng.com/Home/User/test/id/1/
- 这种路由形式需要Apache的支持,而服务器类型很多,所以不推荐使用
-
兼容形式路由
-
兼容模式是用于不支持PATHINFO的特殊环境,URL地址是:
http://网址/入口文件?s=/分组名/控制器名/方法名/参数名/参数值http://www.xingheng.com/index.php?s=/Home/User/test/id/60
-
只有一个参数s
-
- 兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。
路由形式的配置
##### 在系统配置文件中体现—>convention.php
- 上图的配置文件可以看出默认的路由形式是 1 ;就是Pathinfo形式路由
- 不影响其他形式路由形式访问,影响的是thinkPHP系统封装的URL组装函数(U函数)的生成URL地址的形式。
## 分组
#### 一般项目会根据某个功能的适用对象进行分组。也就是平台.比如前台和后台
-
ThinkPHP下的Application下Home文件夹就是一个分组。可根据需求创建新的。
-
第一步:创建一个分组目录,目录与Home同级
-
第二步:创建一个分组目录结构
-
第三步:在创建的分组下Controller文件夹下创建控制器,写方法,测试
-
第四步:访问路由
“`aidl
http://网址/入口文件/分组名/控制器名/方法
-
```
----------

#### *上述就是创建分组的步骤,如果要创建分组,可以根据以上进行*
----------
## 控制器中的跳转
### 1.URL组装
- URL组装就是根据某个规则,来组成一个URL地址,这个功能叫做URL组装,在ThinkPHP中,一个封装的函数来处理URL组装,这个方法叫*U方法*。
- 除了U方法,还有`A B C D E F G I M R S `等方法,这些方法都定义在系统函数库文件中(`function.php`)

- *语法格式*
- `U('URL路径',参数数组);`
```aidl
<?php
#声明命名空间
namespace AdminController;
#引入父类控制器
use ThinkController;
#声明并且继承父类控制器
class TestController extends Controller{
#编写测试方法
public function test(){
echo "hello world";
}
public function test1(){
echo U('index');
}
public function test2(){
echo U('Index/index');
}
public function test3(){
//后面的数组可以传递多个参数
echo U('Index/index',array('id'=>789456));
}
}
- 使用U方法组装出当前控制器下index方法地址
- `U('index');`
- 
- 用U方法组装出另外一个控制器Index的index的地址。
- `U('Index/index')`
- 
- #### 如果给指定的页面添加参数,比如给Index控制器下的index方法传递一个 id = 789456; 则:
- `U('Index/index',array('id'=>789456))`
- 
---------
### 总结出一个通用的格式
- U('分组名/控制器名/方法名',array('参数名1'=>参数值1,参数名2'=>参数值2));
### 1.系统跳转方法
- 在ThinkPHP系统中哟冾跳转方法,分别是成功跳转和失败跳转:
- 成功跳转:$this->success(跳转提示,跳转地址,等待时间);
- 失败跳转:$this->error(跳转提示,跳转地址,等待时间);
- 跳转提示参数必须要有,后面的可以没有。
```aidl
public function test4(){
//应该跳到本页的test方法,效果是“hello world”
$this->success('跳转成功',U('test'),5);
}
public function test5(){
//应该跳到本页的test方法,效果是“hello world”
$this->error('跳转失败',U('test'),5);
}
}
<div class="se-preview-section-delimiter"></div>
- 成功跳转
- 失败跳转
## ThinkPHP中的视图(重点)
### 1.什么是视图
- 视图就是MVC三大组成部分中的V(View),负责信息的输出和展示
### 2.视图的创建
- 创建的位置需要书分组目录下的View目录中与控制器同名的目录中,例如:
- Test控制器中的login方法,需要一个模板,则模板文件login.html需要放在View/Test/login.html
- 例如创建Test控制器的test方法的模板视图,则位置如下:
### 3.视图的展示
- 使用display方法;
- 语法格式:
| 语法格式 | 效果 |
| ———– |:———–:|
| this−>display();|展示当前控制器下与当前请求方法名称一致的模板文件||this−>display();|展示当前控制器下与当前请求方法名称一致的模板文件||this->display(‘模板文件名’【不带后缀】 | 展示当前控制器下的指定模板文件 |
| $this->display(‘View目录下的目录名/模板文件名【不带后缀】) | 展示制定控制器目录下的制定模板文件 |
- 案例:
- 在Test控制器中的test方法中展示test.html
- 在Test控制器中的test1方法中展示test.html
- 在Test控制器中的test2方法中展示View/Demo/test.html
- 在Test控制器中的test方法中展示test.html
### 4.变量分配(初阶)
- 在实际开发中不仅仅只是展示模板这么简单,往往要展示数据。这个时候变量还在控制器的方法中。需要将数据传递到模板中并且展示。这个叫做变量分配。
- 在ThinkPHP系统中封装好了一个变量分配的方法,这个方法叫做assign
- 具体语法 :this−>assign(′模板变量名′,this−>assign(′模板变量名′,php中的变量名);一般情况下,两个参数名一样(习惯)
- 案例:在Test控制器中的test方法中传递一个变量给test.html展示。
“`php
public function test(){
//echo “hello world”;
$var = data('Y-m-d H:i:s',time());
$this->assign('var',$var);
//展示模板
$this->display();
}
- 目前已经将var变量传递给模板文件test.html
,在模板文件中如何展示数据呢?
- 默认的展示变量的方法是:
- {$模板中的变量名}
-
### 5.变量分隔符
- 在ThinkPHP中默认的变量分隔符是“{”和“}”,其是可以被更改的,可以在配置文件中修改
-
### 6.模板常量的替换机制
- 在实际开发中,在引入图片、css、js等资源文件时,往往需要写一些比较复杂的路径,所以这时候需要替换机制。
- 在ThinkPHP中默认给我们几个常用的模板常量。
- __MODULE__
:表示从域名后面开始一直到分组名结束的路由
- __CONTROLLER__
:表示从域名后面开始一直到控制器结束的路由
- __ACTION__
:表示从域名后面开始一直到方法名结束的路由
- __PUBLIC__
:站点根目录下的Public目录的路由
- __SELF__
:表示从域名后面开始一直到路由的最后(如果没有参数,则__SELF__
和__ACTION__
所表达的内容是一样的)
- 如下图:
- 
-
其中ThinkPhp中关于模板常量的代码在行为文件中,路径如下
- ThinkPHPLibraryBehaviorContentReplaceBehavior.class.php
-
- ThinkPHPLibraryBehaviorContentReplaceBehavior.class.php
-
模板常量的核心就是字符串的替换
- 为了后期使用的方便,我们可以在配置文件中定义一个自定义的模板常量:
- 说明:在开发的时候,建议不要去修改系统配置文件。可以将需要修改的配置项在分组/应用级别的配置文件中去定义
- 上面就是自定义的模板文件。下面测试一下:
- 为了后期使用的方便,我们可以在配置文件中定义一个自定义的模板常量: