关于typecho中的路由知识

路由(Routing)是博客系统中将URL地址映射到具体处理逻辑的机制,它决定了当用户访问某个网址时,系统应该执行什么操作、显示什么内容。typecho站点一般都会开启伪静态,伪静态通过URL重写将"漂亮"的URL映射到实际的文件路径,但也带来了一个问题,开启后,服务器会拦截对物理路径的直接访问。这个时候我们就需要使用typecho中的路由,去告诉服务器,当用户扔过来这样一个路径时,应当如何应对。

路由的基本概念

在博客系统中,路由主要完成以下工作:
解析用户请求的URL
确定对应的处理程序(控制器/方法)
提取URL中的参数
返回适当的响应(HTML页面、JSON数据等)

Typecho 的路由

Typecho 的路由系统中,Request 和 Response 是处理 HTTP 请求和响应的两个核心对象。以下是它们的常用函数:

Request

Request 对象常用方法:

获取请求信息

getServer($key, $default = null) - 获取 $_SERVER 变量
getParam($key, $default = null) - 获取请求参数(GET/POST)
getQuery($key, $default = null) - 获取 GET 参数
getPost($key, $default = null) - 获取 POST 参数
getRequestUri() - 获取请求 URI
getPathInfo() - 获取路径信息
getMethod() - 获取请求方法(GET/POST等)
isGet() - 是否是 GET 请求
isPost() - 是否是 POST 请求
isPut() - 是否是 PUT 请求
isAjax() - 是否是 AJAX 请求
isSecure() - 是否是 HTTPS 请求
getIp() - 获取客户端 IP

其他功能

setParam($key, $value) - 设置请求参数
getCookie($key, $default = null) - 获取 Cookie
getFiles($key) - 获取上传文件

Response

Response 对象常用方法:
响应设置

setStatus($code) - 设置 HTTP 状态码
setContentType($contentType, $charset = 'UTF-8') - 设置内容类型
setHeader($name, $value, $replace = true) - 设置响应头
redirect($location, $isPermanently = false) - 重定向

内容输出

write($content) - 写入响应内容
clearBody() - 清空响应内容
getBody() - 获取响应内容
send() - 发送响应

使用示例

// 在路由处理中使用示例
public function action()
{
    $request = $this->request;
    $response = $this->response;
    
    // 获取请求参数
    $id = $request->getParam('id', 0);
    
    // 检查请求方法
    if ($request->isPost()) {
        // 处理POST请求
        $title = $request->getPost('title');
        
        // 设置响应
        $response->setContentType('application/json');
        $response->write(json_encode(['status' => 'success']));
    } else {
        // 重定向
        $response->redirect('/error');
    }
    
    return $response;
}

这些函数提供了处理 HTTP 请求和响应的基本功能,是 Typecho 路由开发中的核心工具。

应用案例

需要注意的是,如果在本地测试没有开启伪静态的情况下,我们的测试地址后面需要先添加index.php,问就是博主卡这里卡一整整一天。


//错误的访问方式
http://localhost/api/getnews

//正确的访问方式
http://localhost/index.php/api/getnews

实现一个站点sitemap的路由,当用户访问xml文件的时候利用sitemap.php来即时生成:

function themeInit($self){
  if (strpos($self->request->getRequestUri(), 'sitemap.xml') !== false) {
    $self->response->setStatus(200);
    $self->setThemeFile("sitemap.php");
  }
}

一个外部获取信息的php文件,通过访问“/api/getnews”这个后缀来执行:

function themeInit($self){
  if ($self->request->getPathInfo() == "/api/getnews") {
    $self->response->setStatus(200);
    $self->setThemeFile("api/api-get-news.php");
  }
}

关于 themeInit

需要注意上方代码中的 themeInit ,它是 Typecho 主题开发中一个非常重要的函数,它允许开发者在主题加载时执行一些初始化操作。这是一个特殊的回调函数,当 Typecho 加载主题时会自动调用它,这个函数需要定义在主题的 functions.php 文件中。所以写路由规则的时候,这个名称是需要严格遵守的。

标签: typecho

移动端可扫我直达哦~

推荐阅读

thumbnail 2025-06-04

typecho前端实现站点语言的切换

前端修改的数据能及时反馈到后端,那当然需要一个前后端都可以无障碍读取的东西,所以最初是想要用localstorage,但发现php无法直接读取其值,所以就换成了cookie。前端通过js来设置参数值:document.cookie='...

建站相关 typecho

thumbnail 2025-06-02

typecho 主题中的模板与模块的概念

模板是 typecho 主题中一个重要的概念,我们说过typecho的极简主题可以只存在 index.php 这一个文件,但需要展现分类页的时候,typecho事实上会先去寻找名为 category.php 的分类页模板,文章页当然也...

建站相关 typecho

thumbnail 2025-06-02

typecho的几种常见的文章列表调用

处理好了header与面包屑,接下来就按照自己的需求自由发挥了,先放一个分类列表,再挑出一个喜欢的标签,自定义一个该标签下内容展示模块。Typecho 提供了多种文章循环方式,以下是常用的几种方法:标准文章循环<?php whi...

建站相关 typecho

thumbnail 2025-06-02

在typecho里实现面包屑导航

什么是面包屑导航面包屑导航是一种网站导航方式,通常在网站顶部显示,大多会放在站点header的下方,用于显示用户当前位置。 面包屑导航由导航元素构成,每个元素代表一个网站导航项,各个元素通常包含对应链接,供用户跳转。面包屑导航示例首页...

建站相关 typecho

thumbnail 2025-05-29

Typecho 模板中的翻译函数 _t 与 _e

在 Typecho 模板开发中,_t 和 _e 是用于国际化处理的函数,核心区别在于输出方式:"_t" 函数‌‌功能‌:获取翻译后的字符串但不直接输出,需结合 echo 使用。‌示例‌:<?php echo _t('欢迎语');...

建站相关 typecho

thumbnail 2025-05-26

typecho文章自定义字段的删除与修改

涉及数据库的操作,务必请提前做好备份!提前做好备份!!做好备份!!!小鸟数据的当前主题的缩略图字段命名为augPostThumb,这几天在尝试完善一下原有主题,下载了原站的数据库导入了测试站用于测试页面效果,测试主题的缩略图相关字段拟...

建站相关 typecho

thumbnail 2025-05-26

typecho的文章自定义字段的知识笔记

在typecho中,除了可以自定义设置项之外,我们也可以给文章自定义一些额外的字段,比如给文章编辑界面添加一个缩略图选项,或者增加一个keywords输入框,用来修改编辑当前内容页的关键词信息。// 主题设置 function th...

建站相关 typecho

thumbnail 2025-05-23

typecho前台无法注销用户的原因

尝试制作主题的时候遇到一个奇怪的问题,自定义主题前台死活注销不掉,以为是本地服务器软件配置问题(本地服务器表示锅我不背),结果换其他主题一换一个正常。仔细检查了一下代码,发现是自己复制粘贴代码的时候在退出登录的按钮上也添加了noope...

建站相关 typecho

thumbnail 2025-05-22

typecho主题的页眉header部分常用代码

网站页眉(Header)是网页顶部固定区域,包含网站核心导航和品牌标识,通常由Logo、主导航菜单、搜索框、实用工具(如登录/注册、购物车)和联系方式等组成。其特点是保持全站一致性、固定显示、响应式设计并强化品牌形象,设计需简洁明了、...

建站相关 typecho

thumbnail 2025-05-16

typecho站点多语言设置简介

网站一般会有一个语言标记,亲如果右键查看本页的html源代码,会在前两行看到类似下面这样的内容,这段代码里涉及到了一个lang 属性,这个属性是 HTML 中用于声明网页或元素内容语言的重要属性,它对网页的可访问性、SEO 和用户体验...

建站相关 typecho

thumbnail 2025-05-16

typecho 后台设置番外篇—数据的备份管理

因为考虑到服务器费用的问题,展开来说就是很多服务器商为了吸引用户,会给予新用户一个极低的价格,而在续费时却基本没有什么优惠,导致续费价格甚至需要在首年价格之后再添上一个0,也因此导致了一些不产生利润的站点如同候鸟一样在各大服务器商之间...

建站相关 typecho