创建控制器

控制器的存储方式

存储目录:/应用/模块/Controller/(例如:Application\Home\Controller )
存储文件名称: 控制器名称(首字母大写)+Controller+class.php

控制器代码创建规则

  1. 设置具体的命名空间
  2. 引入TP的控制器基类
  3. 创建自己的控制器的类
  4. 创建自己的方法

    具体创建控制器

  5. 创建控制器的文件

image.png

  1. 申明命名空间

image.png

  1. 引入基类

image.png

  1. 创建自己的控制器的类

image.png

  1. 创建自定义的方法

image.png

控制器中的地址解析功能

Tp中的全地址解析

就是当访问某一个方法时,需要在浏览器上输入一个完整的地址

  1. TP默认方式访问格式

http://域名/入口文件?m=模块名称 &c=控制器名称&a=方法名称&参数名称=参数值
对于上述地址格式按照MVC的原理mca三个参数其实就是为了定位到具体的控制器的位置.然后在通过实例化对象在调用方法执行代码。

  1. 访问测试

image.png
image.png

TP的默认访问

①查看直接输入域名的效果
image.png
②使用TP完整地址访问
image.png
③解释原因
1、因为对于web项目目前设置的index.php是一个默认访问的文件
2、TP有默认的访问的控制器、模块、方法
image.png
对于上述的三个默认如果在访问某个方法时少输入某一个TP会使用默认的进行替代
image.png
④修改TP的默认访问设置
image.png
⑤删除TP的访问文件
image.png
⑥查看效果
image.png

TP的调试模式

TP的调试模式其实就控制了TP关于配置信息以及函数的缓存功能。
如果开启调试模式,每次访问项目,Tp都会去加载最新的配置以及函数信息。如果关闭了调试模式,当第一次访问TP会讲配置以及函数信息保存到一个文件中(common-runtime.php)后续访问时就会每次直接读取该文件并不在去加载最新的配置信息。
建议在项目开发阶段开启调试模式,因为开启调试模式之后能够使用最新的配置信息,并且当代码出错在调试模式下能够看到具体的错误信息。如果项目需要上线。建议一定要关闭调试模式,因为关闭调试模式可以减少日志文件的生成,并且当代码出错只会提示有错误并不会提示具体的错误位置。

关闭调试模式的效果

image.png
查看效果
image.png

开启调试模式的效果

image.png
查看效果
image.png

TP中的配置项

TP的配置文件位置

1、TP默认的惯例配置文件:ThinkPHP\Conf
2、公共模块的配置文件:\Application\Common\Conf\config.php
3、配置文件目录:\Application\Home\Conf\config.php
image.png

配置文件的优先级

当同一个配置项在上上述的三个配置文件中出现之后,最终以哪一个配置文件所指定的值为准
模块配置文件>公共模块的配置文件>TP默认的惯例配置文件

案例查看具体的优先级

①修改模块的配置文件
image.png
②修改公共模块配置文件
image.png
③修改TP默认模块的配置文件
image.png
④创建方法使用TP的C函数获取配置信息
image.png
⑤访问测试
image.png
关于C函数是TP提供的一个非常重要的函数他的作用可以获取配置信息的值(传递一个参数),也可以临时的设置某一个配置参数的值(传递两个参数)
建议在实际开发过程中不要直接修改TP默认的惯例配置文件。可以通过使用覆盖的方式修改(修改模块或者公共模块的配置项就可以)

TP中创建模块

①在应用中创建后台的目录
image.png
②在Admin目录下创建对应的控制器、模型、视图等目录
image.png
③在后台的模块中创建控制器方法中
image.png
④访问后台中的某一个方法
image.png

TP中的四种URL模式

TP中的四种URL模式介绍

①普通模式
默认情况下是通过给入口文件m,c,a传递三个参数来指定具体的模块、控制器、方法名称就可以实现访问到某一个方法的方法
普通模式访问格式:

  1. http://tp.com/index.php?m=Admir&c=Index&a=testadmin

image.png
对于普通模式没有任何的限制条件。在任何情况下都可以使用普通模式进行访问
②pathinfo模式
对于pathinfo模式在访问的地址格式上看起来比较像访问某一个目录下的文件。对于此模式比较符合搜索引擎优化pathinfo 模式访问格式:

  1. http://tp.com/index.php/Admin/Index/testadmin

image.png
image.png
对于pathinfo模式需要有web服务器(apache)的支持
③重写模式
重写模式在pathinfo的基础之上增加一个重写规则(需要web服务器提供具体的重写规则)。对于重写模式一般使用在隐藏项目的入口文件。
关于隐藏入口文件访问规则

http://tp.com/Admin/Index/testadmin

具体访问效果
image.png
对于重写模式。具体的访问格式不固定。受具体的重写规则文件影响
④兼容模式
为了确保想要使用pathinfo模式。但是web服务器又不支持此模式对于兼容模式同样通过给入口文件传递参数。默认情况下兼容模式传递s的参数来指定具体的模块、控制器、方法名称具体访问格式如下:

http://tp.com/index.php?s=/Admin/Index/testadmin

image.png

实现隐藏入口文件

image.png
②修改虚拟主机配置
image.png
③重启apache
④拷贝具体的重写规则文件
image.png
image.png
测试效果
image.png

URL地址生成

查看U函数的使用
image.png
使用U函数生成连接地址
image.png
访问效果
image.png
默认使用U函数生成的连接地址 对应的pathinfo模式.对于指定的URL表示不全的时候.会自动的将当前具体的模块,控制器进行补充
③修改配置文件生成普通模块的连接地址
image.png
image.png
④使用重写模式生成链接地址
image.png
image.png
注意:设置URL_MODEL参数作用控制U函数使用哪一种模式来生产链接地址。并不是用于限制TP必须要使用哪一种模式才能访问

页面跳转与重定向

页面跳转

TP控制器基类中已经封装好了两个方法就能够实现具体的跳转操作。对success主要针对具体成功之后的跳转而error方法主要十针对失败之后的跳转。
①查看success 跟error具体的使用方式
对于success跟error在使用的方式上是一模一样
image.png
②测试success的使用方式

  1. public function testS(){
  2. $this->success('OK',U('testU'),10);
  3. }
  4. public function untestS(){
  5. $this->error('OK',U('testU'),3);
  6. }

image.png
对于success 跟error在使用上是一模一样没有任何区别。
④具体成功和失败的模板
image.png

页面重定向

  1. 具体使用方法

image.png

  1. demo查看效果

    1. public function testR(){
    2. $this->redirect('testU','id=3',10,'等待10秒钟跳转');
    3. }

    显示效果
    image.png

    空操作与空控制器

    空操作(空方法)

    当用户访问某一个控制器下的不存在的方法,TP会自动的将执行当前控制器下对应的_empty方法。对于此机制就是空操作。

  2. 查看没有空操作效果

image.png

  1. 增加空操作

    1. public function _empty(){
    2. echo 'in empty'.'<hr/>';
    3. echo ACTION_NAME;
    4. }
  2. 查看访问效果

image.png

空控制器

当用户访问某一个不存在的控制器,TP会自动的执行空控制器下的对应方法,刺激值就是空控制器

  1. 查看没有空控制器的效果

image.png

  1. 增加空控制器 ```php <?php namespace Home\Controller; use Think\Controller; class EmptyController extends Controller{

}

?>

  1. 3. 查看空控制器效果
  2. ![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)
  3. 4. 解决空控制器下的报错
  4. ```php
  5. <?php
  6. namespace Home\Controller;
  7. use Think\Controller;
  8. class EmptyController extends Controller{
  9. public function _empty(){
  10. echo 'in EmptyController empty action<br\>';
  11. echo CONTROLLER_NAME.'<br\>';
  12. echo ACTION_NAME;
  13. }
  14. }
  15. ?>
  1. 查看访问效果

image.png
备注:当用户访问某一个控制器时 如果控制器不存在。TP会自动的执行空控制器下对应的方法。如果空控制器下也不存在对应的方法。TP会自动打的执行空控制器下的空方法