tp5 post html,TP5基础

article/2025/9/28 0:54:21

一、基础

project 应用部署目录

├─application 应用目录(可设置)

│ ├─common 公共模块目录(可更改)

│ ├─index 模块目录(可更改)

│ │ ├─config.php 模块配置文件

│ │ ├─common.php 模块函数文件

│ │ ├─controller 控制器目录

│ │ ├─model 模型目录

│ │ ├─view 视图目录

│ │ └─ ... 更多类库目录

│ ├─command.php 命令行工具配置文件

│ ├─common.php 应用公共(函数)文件

│ ├─config.php 应用(公共)配置文件

│ ├─database.php 数据库配置文件

│ ├─tags.php 应用行为扩展定义文件

│ └─route.php 路由配置文件

├─extend 扩展类库目录(可定义)

├─public WEB 部署目录(对外访问目录)

│ ├─static 静态资源存放目录(css,js,image)

│ ├─index.php 应用入口文件

│ ├─router.php 快速测试文件

│ └─.htaccess 用于 apache 的重写

├─runtime 应用的运行时目录(可写,可设置)

├─vendor 第三方类库目录(Composer)

├─thinkphp 框架系统目录

│ ├─lang 语言包目录

│ ├─library 框架核心类库目录

│ │ ├─think Think 类库包目录

│ │ └─traits 系统 Traits 目录

│ ├─tpl 系统模板目录

│ ├─.htaccess 用于 apache 的重写

│ ├─.travis.yml CI 定义文件

│ ├─base.php 基础定义文件

│ ├─composer.json composer 定义文件

│ ├─console.php 控制台入口文件

│ ├─convention.php 惯例配置文件

│ ├─helper.php 助手函数文件(可选)

│ ├─LICENSE.txt 授权说明文件

│ ├─phpunit.xml 单元测试配置文件

│ ├─README.md README 文件

│ └─start.php 框架引导文件

├─build.php 自动生成定义文件(参考)

├─composer.json composer 定义文件

├─LICENSE.txt 授权说明文件

├─README.md README 文件

├─think 命令行入口文件

3、入口文件

默认自带的入口文件位于public/index.php

// 定义应用目录

define('APP_PATH', __DIR__ . '/../application/');

// 加载框架引导文件

require __DIR__ . '/../thinkphp/start.php';

4、资源访问

访问资源问件是不会影响正常的操作访问,只有当资源不存在时才会解析到入口问件,一般提示模块不存在。

资源文件一般放在public目录的子目录下,不要在public目录外的任何位置放置资源文件。

public

├─index.php 应用入口文件

├─static 静态资源目录

│ ├─css 样式目录

│ ├─js 脚本目录

│ └─img 图像目录

5、控制器

当访问一个驼峰命名的控制器时,在url中输入大写的控制器名称会报错,因为默认的URL访问是不区分大小写的,全部都会转换为小写的控制器名。

namespace app\index\controller;

class HelloWorld

{

public function index($name = 'World')

{

return 'Hello,' . $name . '!';

}

}

//直接用http://http://localhost/public/index/HelloWorld访问会报错,控制器不存在

//应该用http://http://localhost/public/index/hello_world访问

//除非在配置文件中设置了关闭url自动转换'url_convert' => false

//通过在url中添加参数来为控制器中的操作方法传递参数http://http://localhost/public/?name=php

如果控制器命名方式是驼峰的,在进行访问时必须改为小写;如果控制器中的操作方法是private和protect类型时,无法直接通过url访问到该操作。

6、视图

在给控制器添加视图文件功能时,首先在该模块下创建view目录,然后添加模板文件view/inde/hello.html

hello {$name}

hello, {$name}!

在控制器方法中进行模板渲染输出操作

namespace app\index\controller;

use think\Controller;

class Index extends Controller

{

public function hello($name = 'thinkphp')

{

$this->assign('name', $name);

return $this->fetch();

}

}

用use导入类库,Index可以直接继承,并直接使用封装好的assign和fetch方法进行模板变量赋值和渲染输出。

二、URL和路由

1、参数传入

以hello方法为例,可以直接在url中添加参数

http://tp5.com/index.php/index/index/hello/name/thinkphp

当需要传入两个参数时,继续在url中添加参数,可以有两种方式

http://tp5.com/index.php/index/index/hello/name/thinkphp/city/shanghai

http://tp5.com/index.php/index/index/hello?city=shanghai&name=thinkphp

还可以进一步对URL地址做简化,前提就是我们必须明确参数的顺序代表的变量,我们更改下URL参数的获取方式,把应用配置文件中的“url_param_type=>1”,此时必须严格按照参数的顺序进行添加。

2、定义路由

在application/route.php定义路由,可以通过直接返回一个数组形式定义路由,也可以通过think的Route类来动态定义路由规则,两者可以混用。一旦定义路由规则,以前的url将会失效。

return [

// 路由参数name为可选,[]表示参数为可选

'hello/[:name]' => 'index/hello',

];

3、完美匹配

上面定义的路由只要是以hello开头的都可以进行匹配,在路由规则后加上$符号,表示完美匹配,只匹配次个hello方法。

return [

// 路由参数name为可选

'hello/[:name]$' => 'index/hello',

];

//http://tp5.com/hello // 正确匹配

//http://tp5.com/hello/thinkphp // 正确匹配

//http://tp5.com/hello/thinkphp/val/value // 不会匹配

4、闭包定义

定义一些特殊需求的路由,不用执行控制器里的方法。

return [

// 定义闭包

'hello/[:name]' => function ($name) {

return 'Hello,' . $name . '!';

},

];

5、路由参数

return [

// 定义路由的请求类型和后缀

'hello/[:name]' => ['index/hello', ['method' => 'get', 'ext' => 'html']],

];

//http://tp5.com/hello // 无效

//http://tp5.com/hello.html // 有效

//http://tp5.com/hello/thinkphp // 无效

//http://tp5.com/hello/thinkphp.html // 有效

6、变量规则

用正则的方式指定变量规则,弥补了动态变量无法限制具体的类型问题。

namespace app\index\controller;

class Blog

{

public function get($id)

{

return '查看id=' . $id . '的内容';

}

public function read($name)

{

return '查看name=' . $name . '的内容';

}

public function archive($year, $month)

{

return '查看' . $year . '/' . $month . '的归档内容';

}

}

路由规则

return [

'blog/:year/:month' => ['blog/archive', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],

'blog/:id' => ['blog/get', ['method' => 'get'], ['id' => '\d+']],

'blog/:name' => ['blog/read', ['method' => 'get'], ['name' => '\w+']],

];

7、路由分组

如上路由拥有相同的前缀,可以将其进行分组,路由分组一定程度上可以提高路由检测的效率。

return [

'[blog]' => [

':year/:month' => ['blog/archive', ['method' => 'get'], ['year' => '\d{4}', 'month' => '\d{2}']],

':id' => ['blog/get', ['method' => 'get'], ['id' => '\d+']],

':name' => ['blog/read', ['method' => 'get'], ['name' => '\w+']],

],

];

三、请求与相应

1、请求对象

Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。获取url:

传统方法:

public function hello($name = 'World')

{

$request = Request::instance();

// 获取当前URL地址 不含域名

echo 'url: ' . $request->url() . '
';

return 'Hello,' . $name . '!';

}

继承think\Controller:

class Index extends Controller

{

public function hello($name = 'World')

{

// 获取当前URL地址 不含域名

echo 'url: ' . $this->request->url() . '
';

return 'Hello,' . $name . '!';

}

}

自动注入请求对象:

public function hello(Request $request, $name = 'World')

{

// 获取当前URL地址 不含域名

echo 'url: ' . $request->url() . '
';

return 'Hello,' . $name . '!';

}

2、动态绑定属性

通过给Request请求对象绑定属性,方便全局调用,首先定义一个新建一个控制器,给Request请求对象绑定属性,以后的控制器可以通过继承该控制器直接调用其属性。

class Base extends Controller

{

public function _initialize()

{

$user = User::get(Session::get('user_id'));

Request::instance()->bind('user',$user);

}

}

class Index extends Base

{

public function index(Request $request)

{

echo $request->user->id;

echo $request->user->name;

}

}

3、助手函数

如果既没有继承think\Controller也不想给操作方法添加额外的Request对象参数,那么也可以使用系统提供的助手

class Index

{

public function hello($name = 'World')

{

// 获取当前URL地址 不含域名

echo 'url: ' . request()->url() . '
';

return 'Hello,' . $name . '!';

}

}

4、获取请求参数

使用param方法统一获取当前请求变量,该方法最大的优势是让你不需要区分当前请求类型而使用不同的全局变量或者方法,并且可以满足大部分的参数需求。

class Index

{

public function hello(Request $request)

{

echo '请求参数:';

dump($request->param());

echo 'name:'.$request->param('name');

}

}

通过input助手函数简化Request对象的param方法。

class Index

{

public function hello()

{

echo '请求参数:';

dump(input());

echo 'name:'.input('name');

}

}

param方法获取参数会自动判断当前请求,参数优先级为:路由变量 > 当前请求变量(

math?formula=_POST%E5%8F%98%E9%87%8F%EF%BC%89%20%3E_GET变量。除了param方法外,还可以通过get、post、cookie、file方法获取参数。

获取参数信息:

class Index

{

public function hello(Request $request)

{

echo '请求方法:' . $request->method() . '
';

echo '资源类型:' . $request->type() . '
';

echo '访问IP:' . $request->ip() . '
';

echo '是否AJax请求:' . var_export($request->isAjax(), true) . '
';

echo '请求参数:';

dump($request->param());

echo '请求参数:仅包含name';

dump($request->only(['name']));

echo '请求参数:排除name';

dump($request->except(['name']));

}

}

获取URL信息:

class Index

{

public function hello(Request $request,$name = 'World')

{

// 获取当前域名

echo 'domain: ' . $request->domain() . '
';

// 获取当前入口文件

echo 'file: ' . $request->baseFile() . '
';

// 获取当前URL地址 不含域名

echo 'url: ' . $request->url() . '
';

// 获取包含域名的完整URL地址

echo 'url with domain: ' . $request->url(true) . '
';

// 获取当前URL地址 不含QUERY_STRING

echo 'url without query: ' . $request->baseUrl() . '
';

// 获取URL访问的ROOT地址

echo 'root:' . $request->root() . '
';

// 获取URL访问的ROOT地址

echo 'root with domain: ' . $request->root(true) . '
';

// 获取URL地址中的PATH_INFO信息

echo 'pathinfo: ' . $request->pathinfo() . '
';

// 获取URL地址中的PATH_INFO信息 不含后缀

echo 'pathinfo: ' . $request->path() . '
';

// 获取URL地址中的后缀信息

echo 'ext: ' . $request->ext() . '
';

return 'Hello,' . $name . '!';

}

}

获取当前模块/控制器/操作信息:

public function hello(Request $request, $name = 'World')

{

echo '模块:'.$request->module();

echo '
控制器:'.$request->controller();

echo '
操作:'.$request->action();

}

5、响应对象——自动输出

一般情况下,不需要关注Response对象本身,只需要在控制器的操作方法中返回数据即可,系统会自动判断是否为Ajax请求,是的话自动输出default_ajax_return配置的输出类型,否则自动输出default_return_type匹配的输出类型。

namespace app\index\controller;

class Index

{

public function hello()

{

$data = ['name' => 'thinkphp', 'status' => '1'];

//通过手动添加参数的控制,来输出不同格式的参数,无需更改配置文件

//return json($data);

return $data;

}

}

默认情况下输出是html输出。因此上述代码会报错,只有更改配置文件后,才能正常输出。

// 默认输出类型

'default_return_type' => 'json',

输出类型 快捷方法

渲染模板输出 view

JSON输出 json

JSONP输出 jsonp

XML输出 xml

页面重定向 redirect

6、页面跳转

namespace app\index\controller;

class Index

{

use \traits\controller\Jump;

public function index($name='')

{

if ('thinkphp' == $name) {

$this->success('欢迎使用ThinkPHP

5.0','hello');

} else {

$this->error('错误的name','guest');

}

}

public function hello()

{

return 'Hello,ThinkPHP!';

}

public function guest()

{

return 'Hello,Guest!';

}

}

7、页面重定向

namespace app\index\controller;

class Index

{

use \traits\controller\Jump;

public function index($name='')

{

if ('thinkphp' == $name) {

$this->redirect('http://thinkphp.cn');

} else {

$this->success('欢迎使用ThinkPHP','hello');

}

}

public function hello()

{

return 'Hello,ThinkPHP!';

}

}

在没有引入Jump trait的情况下,可以使用助手函数redirect函数进行重定向。

namespace app\index\controller;

class Index

{

public function index($name='')

{

if ('thinkphp' == $name) {

return redirect('http://thinkphp.cn');

} else {

return 'Hello,ThinkPHP!';

}

}

}


http://chatgpt.dhexx.cn/article/MAMOHYTs.shtml

相关文章

ThinkPHP 5.0常用助手函数

ThinkPHP 5.0常用助手函数 总结thinkphp手册,以及自己学习中用到的关于tp5的助手函数 首先看看手册给我们提供的助手函数目录: 下面是学习中自己常用到的助手函数 一、url() 一般我们学习中用到url助手函数最多的地方就是跳转页面,最常用的…

【毕业设计_课程设计】基于python的微信公众平台机器人的设计与实现

文章目录 0 项目说明项目介绍项目工程 0 项目说明 基于python的微信公众平台机器人的设计与实现 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 项目介绍 1、NGINX做负载均衡,反向代理 nginx.conf是nginx配置文件&…

实现简单微信机器人

目前,随着人教育体系的提高,培养出专业性人才,为解决繁重的工作带来质的飞越,也就是微信机器人的开发,帮我们抵抗了绝大部分繁重的压力。 接下来向大家介绍的一所微信机器人其功能: 先来介绍下这款应用实现…

微信聊天发码机器人操作指南

目前智多星最新版为3.6.2版本(如下图) 使用指南如下: 常见指令与使用方法: 指令使用方法:对着自己微信(每个微信都可以对自己发消息奥),发送如下指令即可修改机器人配置&#xff…

微信公众号机器人详细教程

文章目录 一.申请并配置机器人二.测试 一.申请并配置机器人 微信对话开放平台: https://openai.weixin.qq.com/依次如下: 扫码: 填写信息: 技能: 发布: 机器人信息编辑: 绑定应用&…

企业微信创建群机器人步骤

1.选择群,右键点击“管理聊天信息“ 2.添加机器人的信息 3.创建好的机器人都有一个唯一的Webhook地址,点击Webhook地址就可以看到文档说明,自动推送消息需要自行开发。 开发者中心地址:https://developer.work.weixin.qq.com/

微信智能对话机器人调用第三方云函数

这是一个通过给公众号绑定微信智能对话机器人调用第三方云函数实现用户信息查询 的简单示例。 一:微信智能对话机器人配置: 1:在“高级技能”中创建“查询用户”的技能,并创建对应的意图。 2:设置字典,也…

Python--微信智能聊天机器人

微信智能聊天机器人 import requests import itchat import time from threading import Timer 图灵机器人编号 如果大家感兴趣的可以登图灵官方网站申请一个自己的图灵小机器人 KEY ‘8f7fcbf19bab471e8067e2783e95b924’ def get_response(msg): apiUrl http://www.tul…

小程序智能聊天机器人(二)

小程序实战之会员支付流程 背景会员套餐设置获取套餐订单创建支付订单申请支付回调更新用户权益总结 背景 接上篇小程序智能聊天机器人(一), 无论何种程序,在我们没有其他收益来源时,用户付费,是让我们回笼…

图灵机器人( 智能回复微信)及(智能聊天)

目录 一、什么是图灵机器人?二、帮你自动微信回复(Python版)三、图灵机器人智能聊天(微信小程序版) 一、什么是图灵机器人? 1、 图灵机器人简介: 是中文语境下智能度最高的“机器人大脑”&…

linux系统抓包命令

IP地址抓包:tcpdump -i any host 1.1.1.2 -n 端口抓包: tcpdump -i any port 6789 -n wireshak工具抓包:tcp.port 6789 过滤源ip、目的ip。在wireshark的过滤规则框Filter中输入过滤条件。如查找目的地址为192.168.101.8的包,ip.…

Linux 抓包命令,你会用吗?

点击关注公众号,Java干货及时送达 tcpdump是一个功能强大的命令行数据包分析器,它是通过监听服务器的网卡来获取数据包,所有通过网络访问的数据包都能获取到。它也提供了过滤器的功能,可以获取指定的网络、端口或协议的数据包 程序…

网络高级命令使用,Linux测试带宽,抓包,一篇解决。

目录 一,iperf测试带宽命令 二,详细网络设备信息 三,当前网络状态 四,抓包tcpdump 一,iperf测试带宽命令 iper -s 作为服务器 -c 作为客户机 -u 使用udp协议 -t 测试时间 -i 间隔时间 -n 要测试的量 -p 通过的端…

linux如何抓包如何分析

为什么要抓包 今天遇到一个bug,访问某接口的时候遇到了HTTP 413报错,意思就是,在网络中的某个节点觉得这个请求太大了,就拒绝了,返回了HTTP 413虽然理解是这么回事,但是要想解决这个问题,首先第…

Linux抓包命令集锦

相信抓包是程序员,运维工程师,架构师,都必不可少的一项技能。但是能够深入掌握好这门技艺的人,确实需要有开发,网络,运维,架构等"跨界”背景才能比较好的发挥抓包神技的威力。本文是纯干货…

怎么在Linux上抓包分析

怎么在Linux上抓包分析 1、在Linux上抓包 例如在Ubuntu上,用命令抓包, tcpdump tcp -i any -s0 -w desk.cap 用 sz desk.cap 把数据包导入本地Windows 2、在windows上用wireshark分析 用wireshark打开desk.cap wireshark筛选条件:tcp…

Linux之tcpdump抓包命令详解

目录 前言 1. 控制抓包行为 2. 控制信息如何显示 3. 控制显示什么数据 4. 过滤命令 4.1 地址过滤 4.2 协议及端口过滤 4.3 报文特征过滤 4.3.1 IP选项设置(20字节,可变部分(0-20)B,最大40字节) 4.3.2 TCP选项…

纯干货:Linux抓包命令集锦

/****************************************************************************************** *              版权声明 *   本文为本人原创,本人拥有此文的版权。鉴于本人持续受益于开源软件社区, * 本人声明:任何个人…

MySQL数据库约束

文章目录 一、表的约束二、空属性三、默认值四、列描述五、zerofill六、主键1.primary key2.复合主键 七、自增长八、唯一键九、外键 一、表的约束 MySQL数据库是有唯一性约束的,真正对表的字段进行约束的是字段类型,比如我们字段类型规定的取值范围是多…

MySql 数据库【约束】

MySql 数据库【约束】 1. 什么是约束?2. 约束包括哪些?3. 非空约束4. 唯一性约束1. 单字段唯一性约束2. 多字段唯一性约束 5. 主键约束1. 主键约束的相关术语?2. 什么是主键?有啥用?3. 单一主键4. 复合主键5. 其他主键…