我的编程空间,编程开发者的网络收藏夹
学习永远不晚

学习笔记-TP5框架学习笔记\(路由\)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

学习笔记-TP5框架学习笔记\(路由\)

TP5框架简单理解

(PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册)

1. 架构总览

TP程序的开始

PHP >=5.3.0, PHP7

ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织。

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。

0的URL访问受路由决定,如果关闭路由或者没有匹配路由的情况下,则是基于:

http://serverName/index.php/模块/控制器/操作/参数/值…

1.1 控制器/操作

0的控制器类比较灵活,可以无需继承任何基础类库。控制器不应该过多的介入业务逻辑处理

一个典型的Index控制器类如下:==控制器就是一个类,类里的不同的方法就是不同的操作==

namespace app\index\controller;
use think\Request;
class Index
{
public function index()
{
return 'hello,thinkphp!';
}
public function test(){
$name = Request::instance()->param('name');
echo "My name is " . $name;
}
}

操作方法可以不使用任何参数,如果定义了一个非可选参数,则该参数必须通过用户请求传入,如果是URL请求,则通常是$_GET或者$_POST方式传入。

  • 如上代码第一行是确定了命名空间。什么是命名空间?

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题。

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字==冲突==
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

而TP5的思想是

ThinkPHP5采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制。

  • 如上代码第二行use就是加载类库,调用TP5写好的Request类,其中实现了一些请求方法。

image-20220411191418823

image-20220411191418823

相对应的就是上面代码11行的Request::instance()->param('name');即获取客户端传入的参数name

1.2 MVC模式流程

通常一个基于TP开发的CMS,可能有很多个模块,而每个模块都是控制器—模型—视图完整的。控制器根据要求选择调用模型,模型进行业务逻辑处理,交给视图渲染。这个流程。

一个模块下面有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。严格来说,控制器不应该过多的介入业务逻辑处理。

模型类通常完成实际的业务逻辑和数据封装,并返回和格式无关的数据。

控制器调用模型类后返回的数据通过视图组装成不同格式的输出。视图根据不同的需求,来决定调用模板引擎进行内容解析后输出还是直接输出。

1.3 类库自动加载

命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载。

如果想调用不同命名空间下的类库的方法,就要先用use给加载上。

1.4 URL访问检测

应用初始化完成后,就会进行URL的访问检测,包括PATH_INFO检测和URL后缀检测。

0的URL访问必须是PATH_INFO方式(包括兼容方式)的URL地址,例如:

http://serverName/index.php/index/index/hello/val/value

所以,如果你的环境只能支持普通方式的URL参数访问,那么必须使用

http://serverName/index.php?s=/index/index/hello&val=value

但是,这样也是行的:

http://serverName/index.php/index/index/hello/?val=value

我的环境可以用上面三种方式,都是默认配置。

1.5 路由模式

1.5.1 普通模式

‘url_route_on’ => false,

关闭路由,使用默认的PATH_INFO模式访问URL:如上面 1.4URL访问检测 的第一个 http://serverName/index.php/module/controller/action/param/value/…

1.5.2 混合模式

‘url_route_on’ => true,

‘url_route_must’=> false,

开启路由,也就是允许了自定义路由,同时对没有定义的路由使用默认的普通模式

1.5.4 强制路由

‘url_route_on’ => true,

‘url_route_must’=> true,

这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。

首页的路由规则采用/定义即可,例如下面把网站首页路由输出Hello,world!

Route::get('/',function(){
return 'Hello,world!';
});

1.6 路由定义

ThinkPHP5 中支持 5种 路由地址方式定义:

定义方式

定义格式

方式1:路由到模块/控制器

‘[模块/控制器/操作]?额外参数1=值1&额外参数2=值2…’

方式2:路由到重定向地址

‘外部地址’(默认301重定向) 或者 [‘外部地址’,‘重定向代码’]

方式3:路由到控制器的方法

‘@[模块/控制器/]操作’

方式4:路由到类的方法

‘::静态方法’ 或者 ‘’

方式5:路由到闭包函数

闭包函数定义(支持参数传入)

1.6.1方式 1:路由到模块/控制器

// 路由到默认或者绑定模块
'blog/:id'=>'blog/read', # 意思是如果访问blog/5,就会调用blog/read并传入参数id=5,下面同理
// 路由到index模块
'blog/:id'=>'index/blog/read',
----------------------------------------------
namespace app\index\controller;
class Blog {
public function read($id){
return 'read:'.$id;
}
}

还支持多级控制器:

//多级控制器方式
'blog/:id'=>'index/group.blog/read'
----------------------------------------------
namespace app\index\controller\group;
class Blog {
public function read($id){
return 'read:'.$id;
}
}

1.6.2 方式2:路由到重定向地址

举个例子,如果我们希望avatar/123重定向到/member/avatar/id/123_small的话,只能使用:

'avatar/:id'=>'/member/avatar/id/:id_small'
# 区别于 'avatar/:id'=>'avatar/read' ,这个不是采用301重定向的。重定向的外部地址必须以“/”或者http开头的地址。

路由地址采用重定向地址的话,如果要引用动态变量,直接使用动态变量即可。

采用重定向到外部地址通常对网站改版后的URL迁移过程非常有用,例如:

'blog/:id'=>'http://blog.thinkphp.cn/read/:id'

表示当前网站(可能是http://thinkphp.cn )的 blog/123地址会直接重定向到 http://blog.thinkphp.cn/read/123。

1.6.3 方式3:路由到控制器的方法

'blog/:id'=>'@index/blog/read',
-------------------------------------
会执行 Loader::action('index/blog/read');
相当于直接调用 \app\index\controller\blog类的read方法。
namespace app\index\controller;
class Blog {
public function read($id){
return 'read:'.$id;
}
}

1.6.4 方式4:路由到类的方法

'blog/:id'=>'\app\index\service\Blog@read'(动态方法)

'blog/:id'=>'\app\index\service\Blog::read',(静态方法)
执行的是 \app\index\service\Blog类的read方法。

1.7 路由使用

application目录是这个应用的目录,index目录是这个应用的一个模块,其内的controller目录存放的是这个模块的控制器,同理一般modle目录就存放的模型,view目录就放的视图。(这里是单纯的框架所以没有)

image-20220412183539545

image-20220412183539545

image-20220412184814572

image-20220412184814572

#index.php
namespace app\index\controller;
use think\Request;
class Index
{
public function index()
{
echo "hahaha";
}
public function test(){
$name = Request::instance()->param('name');
echo "My name is " . $name;
}
}

1.8 路由的其他知识

// 使用注解路由
'route_annotation' => true,
class Index
{

public function hello($name)
{
return 'hello,'.$name;
}
}

其余的直接看这里(TP5.1的)就好

1.9 其他东西

tarit关键字关于这个东西,看PHP手册就行,我的目录下有CHM格式的手册;

'default_return_type'=>'json'修改config.php下的这个配置,可以使输出自动进行数据转换处理。Response类会统一处理。

点击关注,共同学习!
[安全狗的自我修养](https://mp.weixin.qq.com/s/E6Kp0fd7_I3VY5dOGtlD4w)


[github haidragon](https://github.com/haidragon)


https://github.com/haidragon

来源地址:https://blog.csdn.net/sinat_35360663/article/details/127773130

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

学习笔记-TP5框架学习笔记\(路由\)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

nodejs学习笔记之路由

server.jsvar http = require("http"); var url = require("url"); function start(route){//route.js 的route方法//服务实现function o
2022-06-04

python web框架学习笔记

一、web框架本质1.基于socket,自己处理请求#!/usr/bin/env python3 #coding:utf8 import socket def handle_request(client):#接收请求buf = client
2022-06-04

CCNP学习笔记3-路由部分--OSPF

ospf                rip                eigrp分类        IGP 无类 链路状态  IGP 无类 距离矢量  IGP 无类 混合封装        IP 89                
2023-01-31

GNS3学习笔记

最近在自学CCNA,为了搭建路由模拟器先后下载了Boson Network 、DynamipsGUI用的不是很顺手,后来听朋友推荐GNS3很好用,他们报的CCNP培训班老师用的就是GNS,平时的模拟实验都是用这个完成的,由于我本机已有下好的
2023-01-31

20200616学习笔记

count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 而 InnoDB 引擎就麻烦了,它执行 coun
20200616学习笔记
2018-10-19

Kafka 学习笔记

😀😀😀创作不易,各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3
2023-08-30

20200619 学习笔记

主键和唯一的区别 主键:唯一、不为空、只能有一个、可以组合但不推荐 唯一:唯一、可为空、可以多个、可以组合但不推荐 外键 要求在从表设置外键关系 从表的外键列的类型和主表的关联列的类型要求一致或兼容 主表的关联列必须时一个key 插入数据时,
20200619 学习笔记
2019-12-15

Mycat 学习笔记

概述1. Mycat 是什么?Mycat 是数据库中间件,连接 Java 应用程序和数据库,它的作用如下:读写分离数据分片:垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)多数据源整合2. Mycat 原理Mycat 拦截了用户发送过来的 SQL
Mycat 学习笔记
2019-10-05

sqlite3 学习笔记

#!/usr/bin/env python3# -*- coding: utf-8 -*-# @descrip : operate SqLite intrface# @Time : 2020/04/22 21:57# @Author : mingfei
sqlite3 学习笔记
2017-12-28

学习笔记3

一文件查找和压缩1文件查找locate 搜索依赖于数据库,非实时搜索,搜索新建文件需手动更新,适于搜索稳定不频繁修改文件 find 实时搜索,精确搜索,默认当前目录递归搜索 find用法 -maxdepth l
2023-01-31

H3CNE学习笔记

H3CNE五日“游”——之第一天废话少说 直接进入真题!!!!(哈哈 )H3CNE   H3C认证初级网络工程师第    一   节路由器、交换机及其操作系统介绍路由器1、 路由器的作用连接具有不同介质的链路连接网络或子网,隔离广播交换和维
2023-01-31

postgres学习笔记

将一个标识符变得受限同时也使它变成大小写敏感的,反之非受限名称总是被转换成小写形 式。例如,标识符FOO、foo和"foo"在PostgreSQL中被认为是相同的,而"Foo"和"FOO"则互 不相同且也不同于前面三个标识符(PostgreSQL将非受限名字转
postgres学习笔记
2018-01-09

Python学习笔记

Python介绍Python是一种解释型、面向对象的语言。官网:www.python.orgPython环境解释器:www.python.org/downloads运行方式:交互模式。在IDLE中运行。脚本模式。文件的后缀名为.py。
2023-01-30

学习笔记(3)

1.* 匹配零个或多个字符(通配符中)2.ls 的-d选项不仅仅可以显示指定目录的信息,还可以用来表示不递归子文件夹。  # ls -dl /etc 显示/etc目录的信息  # ls -d /etc/* 显示/etc下面的文件和文件夹,并
2023-01-31

20200618_MySQL学习笔记

加号 + Mysql中加号只能做运算符 select 100+90  ==> 190  select "100"+90 ==> 190  如果有一个是字符串,那么尝试转换成数值型,转换成功 select "jack" + 90 ==> 90 转换失败则
20200618_MySQL学习笔记
2014-11-26

MySQL学习笔记

作者: Grey原文地址:MySQL学习笔记说明注:本文中的SQL语句如果用到了特定方言,都是基于MySQL数据库。关于DDLDDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了数据库的结构和数据表的结构。在 D
MySQL学习笔记
2015-01-17

20200617学习笔记

基数  一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好 我们可以使用 show index 方法,看到一个索引的基数 MySQL 是怎样得到索引的基数的呢? 采样统计 : 因为把整张表取出来一行
20200617学习笔记
2022-02-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录