路由与页面
本节说明CMS模式下路由的配置方式、基本/参数/嵌套路由及与模板的对应关系,仅适用于CMS模式。
CMS路由决定URL与主题模板的映射,配置存储在数据库options表的routes字段,或使用安装、初始化时的默认配置,格式为JSON。
配置存储
- 通过
Anon_Cms_Options::get('routes', '[]')读取 - 通过
Anon_Cms_Options::set('routes', json_encode($routes, JSON_UNESCAPED_UNICODE))写入 - 也可在
server/app/useApp.php的app.cms.routes中配置初始值
基本路由
php
Anon_Cms_Options::set('routes', json_encode([
'/' => 'index', // 首页
'/about' => 'about', // 关于页
'/contact' => 'contact', // 联系页
], JSON_UNESCAPED_UNICODE));路径对应主题下的模板文件名,例如 index.php、about.php。
参数路由
支持动态参数,参数会传入模板:
php
Anon_Cms_Options::set('routes', json_encode([
'/post/{id}' => 'post',
'/category/{slug}' => 'category',
'/user/{id}/profile' => 'profile',
], JSON_UNESCAPED_UNICODE));模板中通过变量访问,例如:
php
<!-- app/Theme/default/post.php -->
<h1>文章 ID: <?php echo htmlspecialchars($id ?? ''); ?></h1>嵌套路由
php
Anon_Cms_Options::set('routes', json_encode([
'blog' => [
'index' => 'blog/index',
'post' => [
'{id}' => 'blog/post',
],
],
], JSON_UNESCAPED_UNICODE));生成:
/blog/index→ 模板blog/index.php/blog/post/{id}→ 模板blog/post.php
响应头与路由元数据
CMS 模式下默认输出 HTML,系统会设置 Content-Type: text/html; charset=utf-8。若请求头带 Accept: application/json,可仍返回 JSON。
在模板文件顶部可使用 Anon_RouterMeta 配置元数据:
php
<?php
if (!defined('ANON_ALLOWED_ACCESS')) exit;
const Anon_RouterMeta = [
'header' => true, // CMS 下为 HTML 响应头
'requireLogin' => false,
'method' => 'GET',
'cache' => ['enabled' => true, 'time' => 3600],
];
?>错误处理
- 404:CMS 模式下返回 HTML 404 页,可通过
router_no_match钩子自定义:
php
Anon_System_Hook::add_action('router_no_match', function($path) {
Anon_Cms_Theme::render('404', ['path' => $path]);
});