mtphp 文档

请求与响应

// 请求(Mtphp\Http\Request)
$request->method();          // GET/POST/...
$request->path();            // 已对百分号编码解码(中文路径安全)
$request->query('page', 1);  // GET 参数,带默认值
$request->post('name');      // POST 参数
$request->input('mix');      // 统一取参:post > query > json
$request->json();            // 解析 application/json 请求体
$request->header('x-token');
$request->isAjax();

// 响应(Mtphp\Http\Response)
return response($html);                              // HTML
return response()->json(['ok' => true]);             // JSON(自动转义 UTF-8)
return response()->status(201)->json($data);         // 自定义状态码
return (new Response($body, 404))->header('X-A','1');// 底层响应对象

框架统一以 response->send() 一次性输出(OPcache 友好)。JSON 输出使用 JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE,可容忍部分扩展的 GBK 错误消息。

8.1 文件上传(UploadedFile)

框架内置零依赖的上传封装(Mtphp\Http\UploadedFile,思想借鉴主流框架、独立实现),控制器里直接从请求取文件即可,不依赖任何扩展。

// 助手 request() 惰性捕获当前请求;或直接在路由闭包 / 控制器用 $request 参数
$file = request()->file('avatar');      // 单文件:返回 UploadedFile 或 null
$files = request()->files('images');    // 多文件:返回 UploadedFile 数组;无参返回全部

if ($file !== null && $file->isValid()) {
    // 白名单 + 大小校验(扩展名小写;maxSizeBytes=0 不限制大小)
    if (!$file->validate(['jpg', 'png'], 2 * 1024 * 1024)) {
        return response()->json(['error' => '文件类型或大小不合规'], 422);
    }
    // 移动到目标目录(不存在自动创建;文件名自动 basename 防穿越);返回完整路径
    $path = $file->move('uploads/avatar', uniqid() . '.' . $file->getExtension());
}

// UploadedFile 常用 API
$file->getClientOriginalName();   // 客户端原始名
$file->getExtension();            // 小写扩展名
$file->getSize();                 // 字节数
$file->getClientMimeType();       // 客户端声明 MIME
$file->getMimeType();             // 真实 MIME(finfo 探测,失败回退声明)
$file->hashName();                // 基于内容 hash + 扩展名
$file->isValid();                 // error=0 且文件存在

要点: