TP笔记2、控制器和URL

1 控制器及URL模式

1.1 创建控制器

1.1.1 控制器的存储方式
  • 存储目录:应用/模块/Controller/(Application\Home\Controller)
  • 存储文件名称:控制器名称(首字母大写)+Controller+.class.php
1.1.2 控制器代码创建规则
  1. 设置命名空间
  2. 引入TP的控制器基类
  3. 创建自己的控制器的类
  4. 创建自己的方法
1.1.3 具体创建控制器实例
  1. 创建控制器的文件
    保存目录:Application\Home\Controller\TestController.class.php
  2. 声明命名空间
  3. 引入TP的控制器的基类
  4. 创建自定义的控制器的类
  5. 创建自定义的方法
//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中的全地址解析

  • 当访问某一个方法时需要在浏览器上输入的完整地址
  1. TP默认方式访问格式
  • 域名/入口文件?m=模块名称&c=控制器名称&a=方法名称&参数名称=参数值
  • 对于上述地址格式按照MVC的原理,mca三个参数其实就是为了定位到具体的控制器的位置,然后通过实例化对象在调用方法执行代码
  1. 访问测试
    在这里插入图片描述
  • 对于上述输入的地址起作用的文件Application/Home/Controller目录下的Test控制器test方法

2.2 TP的默认访问

  1. 因为对于web项目目前设置的index.php是一个默认访问的文件
  2. 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个地方

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

4.2 配置文件的优先级

  • 当同一个配置项在上述的4个配置文件中出现之后,优先级为:
  • 模块配置文件>公共模块的配置文件>TP默认的惯例配置文件

注:关于C函数是TP的一个重要函数,可以获取配置信息的值(传递一个参数),也可以临时的设置某个配置项的值(传递2个参数)
再注:实际开发过程中不要直接修改TP默认的配置文件。可以通过使用覆盖的方式修改(修改模块或者公共模块的配置项就可以)

5 TP中创建模块

  • 步骤:
  1. 在应用中创建后台的目录
  2. 在Admin目录下创建对应的MVC目录
  3. 在后台模块中创建控制器和方法
  4. 访问后台中的某个方法
    在这里插入图片描述

6 TP中的4种URL模式

  1. 普通模式
    默认情况下通过给入口文件m、c、a传递三个参数指定具体的模块、控制器、方法来实现访问某个方法
  2. pathinfo模式
    该模式访问地址格式像是访问某个目录文件。适合搜索引擎优化
    格式:http://localhost/yzf/TPdemo/index.php/Admin/Index/testadmin/name/value
    name是参数名,value是参数值
  3. 重写模式
    重写模式在pathinfo的基础上增加一个重写规则。一般使用在隐藏项目的入口文件。
    需要web服务器开启重写规则定义具体的重写规则
    拷贝具体重写规则文件在这里插入图片描述
    此时就可以使用重写模式:
    在这里插入图片描述
  4. 兼容模式
    为了确保使用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;//当前用户访问的方法
    }
}

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章