1 控制器及URL模式
1.1 创建控制器
1.1.1 控制器的存储方式
- 存储目录:应用/模块/Controller/(Application\Home\Controller)
- 存储文件名称:控制器名称(首字母大写)+Controller+.class.php
1.1.2 控制器代码创建规则
- 设置命名空间
- 引入TP的控制器基类
- 创建自己的控制器的类
- 创建自己的方法
1.1.3 具体创建控制器实例
- 创建控制器的文件
保存目录:Application\Home\Controller\TestController.class.php - 声明命名空间
- 引入TP的控制器的基类
- 创建自定义的控制器的类
- 创建自定义的方法
//1.声明命名空间
namespace Home\Controller;
//2.引入TP的控制器的基类
use Think\Controller;
//3.创建自定义的控制器,对于控制器的class名称
//必须要求跟控制器名称一致,需要继承TP控制器的基类
//具体TP控制器的基类存储地址:TPdemo\ThinkPHP\Library\Think\Controller.class.php
class TestController extends Controller{
//4.创建自定义的方法
public function test(){
echo 'in TestController in test action';
}
}
2 TP中的地址解析
2.1 TP中的全地址解析
- 当访问某一个方法时需要在浏览器上输入的完整地址
- TP默认方式访问格式
- 域名/入口文件?m=模块名称&c=控制器名称&a=方法名称&参数名称=参数值
- 对于上述地址格式按照MVC的原理,mca三个参数其实就是为了定位到具体的控制器的位置,然后通过实例化对象在调用方法执行代码
- 访问测试
- 对于上述输入的地址起作用的文件Application/Home/Controller目录下的Test控制器,test方法
2.2 TP的默认访问
- 因为对于web项目目前设置的index.php是一个默认访问的文件
- TP有默认的访问的模块、控制器、方法
3 TP的调试模式
- TP的调试模式其实就控制了TP关于配置信息以及函数的缓存功能
- 如果开启调试模式,每次访问项目,TP都会加载最新的配置以及函数信息。
- 如果关闭了调试模式,当第一次访问TP会将配置以及函数信息保存到一个文件中(common~runtime.php),后续访问时就会每次直接读取该文件并不再去加载最新的配置信息
- 开发阶段,建议开启调试模式,开启后能使用最新的配置信息,代码出错能看到具体错误位置
- 若项目上线,建议关闭,可以减少日志文件的生成,代码出错只会提示有错误,并不提示具体错误位置
3.1 开启调试模式
- 必须开启在载入入口文件前
//1、定义应用的存储地址
define('APP_PATH','./Application/');
//开启TP的调试模式
define('APP_DEBUG',TRUE);
//2、载入TP框架入口文件
include './ThinkPHP/ThinkPHP.php';
4 TP的配置项
4.1 TP的配置文件位置
TP配置文件有3个地方
- TP默认的惯例配置文件:ThinkPHP\Conf\convention.php
- 公共模块的配置文件:Application\Common\Conf\config.php
- 模块配置文件:Application\Home\Conf\config.php
4.2 配置文件的优先级
- 当同一个配置项在上述的4个配置文件中出现之后,优先级为:
- 模块配置文件>公共模块的配置文件>TP默认的惯例配置文件
注:关于C函数是TP的一个重要函数,可以获取配置信息的值(传递一个参数),也可以临时的设置某个配置项的值(传递2个参数)
再注:实际开发过程中不要直接修改TP默认的配置文件。可以通过使用覆盖的方式修改(修改模块或者公共模块的配置项就可以)
5 TP中创建模块
- 步骤:
- 在应用中创建后台的目录
- 在Admin目录下创建对应的MVC目录
- 在后台模块中创建控制器和方法
- 访问后台中的某个方法
6 TP中的4种URL模式
- 普通模式
默认情况下通过给入口文件m、c、a传递三个参数指定具体的模块、控制器、方法来实现访问某个方法 - pathinfo模式
该模式访问地址格式像是访问某个目录文件。适合搜索引擎优化
格式:http://localhost/yzf/TPdemo/index.php/Admin/Index/testadmin/name/value
name是参数名,value是参数值 - 重写模式
重写模式在pathinfo的基础上增加一个重写规则。一般使用在隐藏项目的入口文件。
需要web服务器开启重写规则定义具体的重写规则
拷贝具体重写规则文件
此时就可以使用重写模式:
- 兼容模式
为了确保使用pathinfo模式,但web服务器不支持此模式。
对于兼容模式同样通过入口文件传递参数。
默认情况下传递s的参数来指定具体的模块、控制器、方法
格式:http://localhost/yzf/TPdemo/index.php?s=/Admin/Index/testadmin
URL地址生成
1 查看U函数的使用
- 默认使用U函数生成的连接地址,对应的pathinfo模式。对于指定的URL不全表示不全时。会自动的将当前具体进行补充
U($url,$var,$suffix,$domain)
参数 | 说明 |
---|---|
url | 指定的具体的URL表达式,指定具体的模块、控制器、方法 |
vars | 具体生成连接地址的参数,支持数组和字符串 |
suffix | 伪静态后缀 |
domain | 是否显示域名,默认为false |
2 使用U函数生成连接地址
public function testu(){
echo U('testu').'<hr>';
echo U('testu','id=2').'<hr>';
echo U('Index/testu','id=2').'<hr>';
echo U('Index/testu#top','id=2').'<hr>';
echo U('Index/testu#[email protected]','id=2').'<hr>';
}
7 页面跳转与重定向
7.1 页面跳转
- TP控制基类已经封装好了2个方法(success与error)能够实现具体的跳转操作。
- success($message=’ ‘,$jumpUrl=’ ',$ajax=false)
- error($message=’ ‘,$jumpUrl=’ ',$ajax=false)
参数 | 说明 |
---|---|
message | 提示信息 |
jumpUrl | 页面跳转地址,建议用TP的U函数来生成具体地址 |
ajax | 默认为false,是否为Ajax方式,设置提示页面的等待时间 |
public function testS(){
$this->success('OK',U('testU'),10);//成功默认1秒钟跳转
}
public function testE(){
$this->error('NO',U('testU'));//错误默认3秒钟跳转
}
7.2 页面重定向
- redirect($url,$params=array(),\delay=0,$msg=’ ’ )
参数 | 说明 |
---|---|
url | 链接地址 |
params | 其他url参数 |
delay | 延时跳转时间 |
msg | 跳转提示信息 |
public function testR(){
$this->redirect('testU','id=6',10,'等待10秒钟实现跳转');
}
8 空操作与空控制器
8.1 空操作(空方法)
- 当用户服务某一个控制器下的不存在的方法,TP会执行当前控制器下的_empty方法。此机制就是空操作
public function _empty(){
//处理当前控制器下不存在的方法。
echo 'in empty<br>';
echo ACTION_NAME;//当前用户执行的方法
}
8.2 空控制器
- 当用户服务某个不存在的控制器。TP执行空控制器下对应方法。
- 若访问控制器不存在,则调用空控制器下的_empty方法
- 若访问空控制器下的方法也不存在,则调用空控制器下的_empty方法
- 创建一个空控制器=
class EmptyController extends Controller{
public function _empty(){
echo 'in EmptyController empty action<br>';
echo CONTROLLER_NAME.'<br>';//当前用户访问控制器名称
echo ACTION_NAME;//当前用户访问的方法
}
}