tinkphp路由,控制器,请求的简单理解

路由

路由的模式
路由分为三种模式,1.普通模式2.混合模式3.强制模式。
在普通模式下,路由规则的定义是不区分请求方法(GET、POST等)的,默认情况下,使用 GET 方法即可访问路由规则。
在混合模式下,路由规则会根据请求的方法进行匹配,例如 GET 请求和 POST 请求可以分别匹配不同的路由规则。这种模式下,可以使用 get、post、put、delete 等方法定义路由规则。
在强制模式下,所有的路由规则都必须使用特定的请求方法来匹配,如果请求方法不匹配,将返回 405 “Method Not Allowed” 错误。这种模式下,必须使用 get、post、put、delete 等方法来定义路由规则。

定义路由

Route::rule(‘路由表达式’,‘路由地址’,‘请求类型’,‘路由参数(数组)’,‘变量规则(数组)’);
url生成
url(‘模块/控制器/操作’, ‘参数’, ‘伪静态后缀’, ‘是否跨域’);
例如
$url = url('index/index'); echo $url;

控制器

控制器用于处理客户端请求和返回响应。控制器位于应用目录下的 app 目录中,按照约定的命名规则和目录结构进行组织。
页面跳转与重定向
助手函数用于实现跳转和重定向操作。它们分别是 redirect() 函数和 return redirect() 语句。
redirect() 函数
使用 redirect() 函数可以简单地实现重定向操作,该函数的语法格式如下:

redirect($url, $params = [], $code = 302, $withSession = false);

return redirect() 语句

除了 redirect() 函数之外,还可以使用 return redirect() 语句进行重定向操作。

与 redirect() 函数类似,return redirect() 语句也可以设置目标 URL、参数、状态码等。它的语法格式如下:

return redirect($url)->with($data)->status($code)->cookie($name, $value, $minutes, $path, $domain, $secure = false, $httpOnly = true);

空操作,空控制器

空控制器和空操作来处理特定的请求或实现默认行为。空控制器是指没有任何具体操作方法的控制器,而空操作是指在控制器中定义一个名为 _empty 的方法来处理
示例

namespace app\index\controller;

use think\Controller;

class EmptyController extends Controller
{
    // 空操作
    public function _empty()
    {
        // 处理未匹配到具体操作方法的请求
        // 返回默认响应或跳转到其他页面
    }
}

请求

请求信息$request = request();

$request = Request::instance();
// 获取当前域名
echo 'domain: ' . $request->domain() . '<br/>';
// 获取当前入口文件
echo 'file: ' . $request->baseFile() . '<br/>';
// 获取当前URL地址 不含域名
echo 'url: ' . $request->url() . '<br/>';
// 获取包含域名的完整URL地址
echo 'url with domain: ' . $request->url(true) . '<br/>';
// 获取当前URL地址 不含QUERY_STRING
echo 'url without query: ' . $request->baseUrl() . '<br/>';
// 获取URL访问的ROOT地址
echo 'root:' . $request->root() . '<br/>';
// 获取URL访问的ROOT地址
echo 'root with domain: ' . $request->root(true) . '<br/>';
// 获取URL地址中的PATH_INFO信息
echo 'pathinfo: ' . $request->pathinfo() . '<br/>';
// 获取URL地址中的PATH_INFO信息 不含后缀
echo 'pathinfo: ' . $request->path() . '<br/>';
// 获取URL地址中的后缀信息
echo 'ext: ' . $request->ext() . '<br/>';

输入变量

input('?get.id');
input('?post.name');

变量类型方法包括:

方法 描述
param 获取当前请求的变量
get 获取 $_GET 变量
post 获取 $_POST 变量
put 获取 PUT 变量
delete 获取 DELETE 变量
session 获取 $_SESSION 变量
cookie 获取 $_COOKIE 变量
request 获取 $_REQUEST 变量
server 获取 $_SERVER 变量
env 获取 $_ENV 变量
route 获取 路由(包括PATHINFO) 变量
file 获取 $_FILES 变量

// 获取当前请求的name变量
Request::instance()->param('name');
可使用助手函数input('param.name');查取

更改变量

Request::instance()->get(['id'=>10]);
只用改变请求类型

获取请求类型
// 是否为 GET 请求
if (Request::instance()->isGet()) echo “当前为 GET 请求”;
// 是否为 POST 请求
if (Request::instance()->isPost()) echo “当前为 POST 请求”;
// 是否为 PUT 请求
if (Request::instance()->isPut()) echo “当前为 PUT 请求”;
// 是否为 DELETE 请求
if (Request::instance()->isDelete()) echo “当前为 DELETE 请求”;
// 是否为 Ajax 请求
if (Request::instance()->isAjax()) echo “当前为 Ajax 请求”;
// 是否为 Pjax 请求
if (Request::instance()->isPjax()) echo “当前为 Pjax 请求”;
// 是否为手机访问
if (Request::instance()->isMobile()) echo “当前为手机访问”;
// 是否为 HEAD 请求
if (Request::instance()->isHead()) echo “当前为 HEAD 请求”;
// 是否为 Patch 请求
if (Request::instance()->isPatch()) echo “当前为 PATCH 请求”;
// 是否为 OPTIONS 请求
if (Request::instance()->isOptions()) echo “当前为 OPTIONS 请求”;
// 是否为 cli
if (Request::instance()->isCli()) echo “当前为 cli”;
// 是否为 cgi
if (Request::instance()->isCgi()) echo “当前为 cgi”;

还可以直接用助手函数直接查看请求类型
如:

// 是否为 GET 请求
if (request()->isGet()) echo "当前为 GET 请求";

请求类型伪装

支持请求类型伪装,可以在POST表单里面提交_method变量,传入需要伪装的请求类型

// 表单请求类型伪装变量
'var_method'             => '_m',

这样可以绕过请求类型限制。躲避安全防护机制,欺骗服务器逻辑

伪静态

uRL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置url_html_suffix参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行'url_html_suffix'=>' '
作用:提升用户体验,改善搜索引擎优化,提高网站安全性,符合URL约定和美观需求
提升用户体验:伪静态能够将动态生成的URL转化为易读且语义化的静态URL,对于用户来说更加友好。这种URL的结构更简洁、清晰,对于记忆、书签等操作更方便,并且给用户带来了更好的浏览体验。

改善搜索引擎优化(SEO):搜索引擎对静态URL的收录更友好,相对于含有动态参数的URL,静态URL更容易被搜索引擎抓取和索引。通过伪静态处理,可以使网站的页面URL看起来更加静态化,增加网站在搜索引擎中的可见性和排名。

提高网站安全性:伪静态可以隐藏服务器端的真实地址和技术细节,减少恶意攻击者进行目录枚举、注入等攻击的风险。对于常见的Web攻击类型,如SQL注入、XSS攻击等,伪静态可以提供一定的安全保护。

符合URL约定和美观需求:有时候网站的URL结构对用户来说具有某种语义,例如文章的标题、分类等信息,希望能够体现在URL中。通过伪静态技术,可以将这些信息作为路径或参数的一部分,使得URL更加符合约定和美观的需求。

方法注入

方法注入是指通过代码实现动态向一个类或对象中添加新的方法,修改原有方法的行为或替换原有方法的实现。

// 通过hook方法注入动态方法
Request::hook('user','getUserInfo');

属性注入

属性注入是指在实例化对象时,通过代码为对象的属性设置对应的值,以达到动态配置对象的目的。

request()->user;

参数绑定

参数绑定是指将客户端请求中的参数值与服务器端代码中的方法参数进行关联,以便在请求处理过程中正确地传递参数值
1路径参数绑定2查询参数绑定3表单参数绑定4请求体参数绑定5请求头参数绑定
依赖注入
依赖注入(也称之为控制反转)是一种较为轻量的实现,无需任何的配置,并且主要针对访问控制器进行依赖注入。可以在控制器的构造函数或者操作方法(指访问请求的方法)中类型声明任何(对象类型)依赖,这些依赖会被自动解析并注入到控制器实例或方法中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值