跳到主要内容

🔄 请求生命周期

每个请求都从 index.php 开始

  1. 定义常量(ROOTAPPCONFIG
  2. 加载辅助函数
  3. 检查是否已安装(config/database.php 是否存在?)
  4. 如果未安装 → 重定向到 /install/
  5. 加载数据库配置 + 辅助函数,启动会话
  6. 计算请求路径(处理子目录安装)
  7. 通过 app/router.php 调度

路由器

app/router.php 是一个扁平的模式匹配调度表。模式被编译为正则表达式并与请求路径进行匹配。捕获组作为控制器方法参数传递。


身份验证

大多数控制器调用 require_auth(),该函数将未认证用户重定向到 /login。仅限管理员的端点使用 require_admin(),返回 403 JSON。

登录时会话填充 user_idworkspace_idrole,并重新生成以防止会话固定攻击。


数据库连接

PDO 连接在首次查询时延迟创建(单例模式)。使用 ERRMODE_EXCEPTION 和真正的预处理语句(EMULATE_PREPARES = false)。


响应格式

  • HTML 页面: 控制器设置 $page 并包含 layout.php
  • JSON API: json_response() 设置 Content-Type,输出 JSON,退出
  • SSE 流: 使用 text/event-stream 的持久循环,每 2 秒 ping,55 秒后退出