mtphp 文档

HTTP 辅助与 Query 增强(Phase 3)

25.1 中断请求 abort / abort_if / abort_unless

抛出 Mtphp\Exception\HttpException,由 App 统一渲染为对应状态码的错误响应(404/403/401/500…)。

abort(404);                       // 抛出 404
abort(403, '无权限');             // 带消息
abort_if($user === null, 401, '请登录');   // 条件成立才抛
abort_unless($logged, 401, '请登录');      // 条件不成立才抛

25.2 重定向 redirect / back / with

redirect($url) 返回 302 响应(Location 头);back() 取 HTTP_REFERER 回落到 /;with($k,$v) 经 Session 落地一次性 flash(下次请求用 session()->getFlash($k) 读取)。

return redirect('/login');                       // 直接跳转
return redirect('/login', 301);                  // 永久跳转
return redirect('/login')->with('msg', '请先登录'); // 带一次性提示
return back();                                   // 返回上一页

with() 依赖 StartSession 中间件注入的会话;未启用会话时静默降级(不报错)。App 已新增 setSession()/session() 访问器供其取用。

25.3 请求校验 Request::validate()

控制器内一行完成输入校验;失败自动抛出 ValidationException,由 App 渲染为 422 JSON {message, errors},无需手动捕获。通过则返回白名单过滤后的合法数据。

$data = $request->validate([
    'name'  => 'required|max:50',
    'email' => 'required|email',
    'age'   => 'integer|min:0',
]);
// 失败 → 422 {"message":"校验失败","errors":{"email":["email 格式不正确"]}}
// 成功 → $data 仅含 name/email/age(自动剔除多余字段)

$request->all() 合并了 query + post + JSON 体(后者覆盖前者),作为校验数据源。校验规则与 Mtphp\Validation\Validator 完全复用(含 extend() 自定义规则)。

25.4 Query 聚合 sum / avg / max / min

DB::table('order')->sum('amount');   // float
DB::table('order')->avg('amount');   // float
DB::table('order')->max('amount');   // mixed(按列类型)
DB::table('order')->min('amount');   // mixed

25.5 查询谓词增强 distinct / whereNotIn / whereBetween / orderByDesc

DB::table('user')->distinct()->select('city')->get();        // 去重
DB::table('user')->whereNotIn('id', [1,2,3])->get();         // 不在集合
DB::table('order')->whereBetween('created_at', [$a, $b])->get(); // 闭区间
DB::table('user')->orderByDesc('id')->get();                 // 降序简写

25.6 字段自增自减 increment / decrement

生成 UPDATE ... SET col = col ± ? WHERE ...;强制要求带 where 条件,避免无意识全表更新。

DB::table('user')->where('id', 1)->increment('score', 5);   // +5
DB::table('user')->where('id', 1)->decrement('score', 1);   // -1
// DB::table('user')->increment('score');  // 无 where → 抛 RuntimeException

以上全部能力均配套零依赖单测(见 tests/,php tests/run.php 一键跑全量,全绿)。