Dispatch 是極簡 PHP 微框架(單文件 < 100KB),無 MVC 強制結構,專注於路由定義 + 閉包處理,適合 API、單頁應用後端、快速原型、微服務。
composer require dispatch/dispatch # 或直接下載 dispatch.php 放入項目
| 方法 | 用途 | 示例 |
|---|---|---|
get($pattern, $callable) | GET 路由 | `get('/user/{id}', fn($id) => ...)` |
post($pattern, $callable) | POST 路由 | `post('/login', fn() => ...)` |
put/patch/delete/options | 其他 HTTP 動詞 | `delete('/user/{id}', ...)` |
any($pattern, $callable) | 匹配所有方法 | `any('/health', ...)` |
render($view, $data) | 渲染視圖 (需模板引擎) | `render('user', ['name'=>$name])` |
dispatch() | 啟動路由分發 | 放在文件末尾 |
from($array, $key) | 安全獲取輸入 | `from($_POST, 'email')` |
// 靜態路由
get('/about', fn() => 'About Us');
// 參數路由(花括號)
get('/user/{id}', function($id) {
return "User ID: $id";
});
// 可選參數
get('/posts[/{page}]', function($page = 1) {
return "Page: $page";
});
// 正則約束
get('/user/{id:\d+}', function($id) { // 僅匹配數字
return "User $id";
});
// 萬用匹配(需放最後)
any('{path:.+}', fn($path) => "404: $path");
<?php
require 'vendor/autoload.php';
use Dispatch\App;
$app = new App();
// 中間件風格:前置處理
$app->before(function() {
header('Content-Type: application/json; charset=utf-8');
// CORS
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
});
// 路由定義
get('/api/users', function() {
$users = User::all(); // 假設模型
return json_encode(['data' => $users]);
});
get('/api/users/{id:\d+}', function($id) {
$user = User::find($id);
if (!$user) {
http_response_code(404);
return json_encode(['error' => 'Not found']);
}
return json_encode(['data' => $user]);
});
post('/api/users', function() {
$input = json_decode(file_get_contents('php://input'), true);
$user = User::create($input);
http_response_code(201);
return json_encode(['data' => $user]);
});
put('/api/users/{id:\d+}', function($id) {
$input = json_decode(file_get_contents('php://input'), true);
$user = User::find($id);
if (!$user) { http_response_code(404); return json_encode(['error' => 'Not found']); }
$user->update($input);
return json_encode(['data' => $user]);
});
delete('/api/users/{id:\d+}', function($id) {
User::destroy($id);
http_response_code(204);
});
// 異常處理
$app->error(function(Exception $e) {
http_response_code(500);
return json_encode(['error' => $e->getMessage()]);
});
// 啟動
dispatch();