创建控制器
控制器的存储方式
存储目录:/应用/模块/Controller/(例如:Application\Home\Controller )
存储文件名称: 控制器名称(首字母大写)+Controller+class.php
控制器代码创建规则
- 申明命名空间
- 引入基类
- 创建自己的控制器的类
- 创建自定义的方法
控制器中的地址解析功能
Tp中的全地址解析
就是当访问某一个方法时,需要在浏览器上输入一个完整的地址
- TP默认方式访问格式
http://域名/入口文件?m=模块名称 &c=控制器名称&a=方法名称&参数名称=参数值
对于上述地址格式按照MVC的原理mca三个参数其实就是为了定位到具体的控制器的位置.然后在通过实例化对象在调用方法执行代码。
- 访问测试
TP的默认访问
①查看直接输入域名的效果
②使用TP完整地址访问
③解释原因
1、因为对于web项目目前设置的index.php是一个默认访问的文件
2、TP有默认的访问的控制器、模块、方法
对于上述的三个默认如果在访问某个方法时少输入某一个TP会使用默认的进行替代
④修改TP的默认访问设置
⑤删除TP的访问文件
⑥查看效果
TP的调试模式
TP的调试模式其实就控制了TP关于配置信息以及函数的缓存功能。
如果开启调试模式,每次访问项目,Tp都会去加载最新的配置以及函数信息。如果关闭了调试模式,当第一次访问TP会讲配置以及函数信息保存到一个文件中(common-runtime.php)后续访问时就会每次直接读取该文件并不在去加载最新的配置信息。
建议在项目开发阶段开启调试模式,因为开启调试模式之后能够使用最新的配置信息,并且当代码出错在调试模式下能够看到具体的错误信息。如果项目需要上线。建议一定要关闭调试模式,因为关闭调试模式可以减少日志文件的生成,并且当代码出错只会提示有错误并不会提示具体的错误位置。
关闭调试模式的效果
开启调试模式的效果
TP中的配置项
TP的配置文件位置
1、TP默认的惯例配置文件:ThinkPHP\Conf
2、公共模块的配置文件:\Application\Common\Conf\config.php
3、配置文件目录:\Application\Home\Conf\config.php
配置文件的优先级
当同一个配置项在上上述的三个配置文件中出现之后,最终以哪一个配置文件所指定的值为准
模块配置文件>公共模块的配置文件>TP默认的惯例配置文件
案例查看具体的优先级
①修改模块的配置文件
②修改公共模块配置文件
③修改TP默认模块的配置文件
④创建方法使用TP的C函数获取配置信息
⑤访问测试
关于C函数是TP提供的一个非常重要的函数他的作用可以获取配置信息的值(传递一个参数),也可以临时的设置某一个配置参数的值(传递两个参数)
建议在实际开发过程中不要直接修改TP默认的惯例配置文件。可以通过使用覆盖的方式修改(修改模块或者公共模块的配置项就可以)
TP中创建模块
①在应用中创建后台的目录
②在Admin目录下创建对应的控制器、模型、视图等目录
③在后台的模块中创建控制器方法中
④访问后台中的某一个方法
TP中的四种URL模式
TP中的四种URL模式介绍
①普通模式
默认情况下是通过给入口文件m,c,a传递三个参数来指定具体的模块、控制器、方法名称就可以实现访问到某一个方法的方法
普通模式访问格式:
http://tp.com/index.php?m=Admir&c=Index&a=testadmin
对于普通模式没有任何的限制条件。在任何情况下都可以使用普通模式进行访问
②pathinfo模式
对于pathinfo模式在访问的地址格式上看起来比较像访问某一个目录下的文件。对于此模式比较符合搜索引擎优化pathinfo 模式访问格式:
http://tp.com/index.php/Admin/Index/testadmin
对于pathinfo模式需要有web服务器(apache)的支持
③重写模式
重写模式在pathinfo的基础之上增加一个重写规则(需要web服务器提供具体的重写规则)。对于重写模式一般使用在隐藏项目的入口文件。
关于隐藏入口文件访问规则
http://tp.com/Admin/Index/testadmin
具体访问效果
对于重写模式。具体的访问格式不固定。受具体的重写规则文件影响
④兼容模式
为了确保想要使用pathinfo模式。但是web服务器又不支持此模式对于兼容模式同样通过给入口文件传递参数。默认情况下兼容模式传递s的参数来指定具体的模块、控制器、方法名称具体访问格式如下:
http://tp.com/index.php?s=/Admin/Index/testadmin
实现隐藏入口文件
②修改虚拟主机配置
③重启apache
④拷贝具体的重写规则文件
测试效果
URL地址生成
查看U函数的使用
使用U函数生成连接地址
访问效果
默认使用U函数生成的连接地址 对应的pathinfo模式.对于指定的URL表示不全的时候.会自动的将当前具体的模块,控制器进行补充
③修改配置文件生成普通模块的连接地址
④使用重写模式生成链接地址
注意:设置URL_MODEL参数作用控制U函数使用哪一种模式来生产链接地址。并不是用于限制TP必须要使用哪一种模式才能访问
页面跳转与重定向
页面跳转
TP控制器基类中已经封装好了两个方法就能够实现具体的跳转操作。对success主要针对具体成功之后的跳转而error方法主要十针对失败之后的跳转。
①查看success 跟error具体的使用方式
对于success跟error在使用的方式上是一模一样
②测试success的使用方式
public function testS(){
$this->success('OK',U('testU'),10);
}
public function untestS(){
$this->error('OK',U('testU'),3);
}
对于success 跟error在使用上是一模一样没有任何区别。
④具体成功和失败的模板
页面重定向
- 具体使用方法
demo查看效果
public function testR(){
$this->redirect('testU','id=3',10,'等待10秒钟跳转');
}
空操作与空控制器
空操作(空方法)
当用户访问某一个控制器下的不存在的方法,TP会自动的将执行当前控制器下对应的_empty方法。对于此机制就是空操作。
查看没有空操作效果
增加空操作
public function _empty(){
echo 'in empty'.'<hr/>';
echo ACTION_NAME;
}
查看访问效果
空控制器
当用户访问某一个不存在的控制器,TP会自动的执行空控制器下的对应方法,刺激值就是空控制器
- 查看没有空控制器的效果
- 增加空控制器 ```php <?php namespace Home\Controller; use Think\Controller; class EmptyController extends Controller{
}
?>
3. 查看空控制器效果
![image.png](https://cdn.nlark.com/yuque/0/2022/png/26802498/1653912301672-ec99da3c-ca85-4df7-9392-d3e4b04c3e86.png#clientId=u56df7d3d-af3a-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=374&id=uf9a7c26d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=468&originWidth=1531&originalType=binary&ratio=1&rotation=0&showTitle=false&size=502984&status=done&style=none&taskId=u35715ef8-64b5-4b7e-9361-4e0381a6fd9&title=&width=1224.8)
4. 解决空控制器下的报错
```php
<?php
namespace Home\Controller;
use Think\Controller;
class EmptyController extends Controller{
public function _empty(){
echo 'in EmptyController empty action<br\>';
echo CONTROLLER_NAME.'<br\>';
echo ACTION_NAME;
}
}
?>
- 查看访问效果
备注:当用户访问某一个控制器时 如果控制器不存在。TP会自动的执行空控制器下对应的方法。如果空控制器下也不存在对应的方法。TP会自动打的执行空控制器下的空方法