只想簡單的做個帶幾個路由的服務,用 php 框架就有點大題小作了。Klein.php,這個輕量級的路由庫,此時是一個不錯的選擇。
Klein.php
簡介
Klein.php,是 klein 組織在 Github 上開源的 PHP 路由庫,代碼倉庫在
https://github.com/klein/klein.php,目前版本為 2.1.2。Klein 十分靈活,使用正則表達式進行路由匹配;接口簡單,方便快速上手開發;性能優秀,每秒可處理 2500+ 請求。
Klein.php
安裝
Klein 需要 PHP 5.3.x,使用 Composer 進行安裝:
php composer.phar require klein/klein
并在主 PHP 文件中加入 autoload:
require 'vendor/autoload.php';
示例
Klein 的使用十分簡單,以下是一個 Hello World 例子:
<?php
require_once __DIR__ . '/vendor/autoload.php';
$klein = new KleinKlein();
$klein->respond('GET', '/hello-world', function () {
return 'Hello World!';
});
$klein->dispatch();
使用 respond 注冊路由處理方法,并使用 dispatch 運行路由。
Klein 對于路由匹配使用可帶命名參數的正則表達式進行,而解析得到的參數可以通過 $request 參數獲得:
$klein->respond('/[:name]', function ($request) {
return 'Hello ' . $request->name;
});
下面再看一些更加復雜的例子:
/posts/[*:title][i:id] // 匹配 /posts/this-is-a-title-123
/output.[xml|json:format]? // 匹配 /output,/output.xml 和 /output.json
/[:controller]?/[:action]? // 匹配可選的 /controller/action 格式
也可以同時匹配多種請求方法,通過傳遞 array 實現:
$klein->respond(array('POST','GET'), $route, $callback);
對于文件上傳,klein 通過回調的 $service 參數接收;而對于發送文件,則可以使用 $response 的 send 或 file 實現:
$klein->respond(function ($request, $response, $service) {
$service->xml = function ($object) {
// 處理XML文件
}
$service->csv = function ($object) {
// 處理CSV文件
}
});
$klein->respond('/report.[xml|csv|json:format]?', function ($request, $response, $service) {
$send = $request->param('format', 'json');
$response->$send($report); // 通過send返回對象
});
$klein->respond('/report/latest', function ($request, $response, $service) {
$response->file('/tmp/cached_report.zip'); // 通過file返回文件路徑的文件
});
更多
- Klein 支持路由組,可以在同一路由下定義不同的子路由以形成不同的路由命名空間。
$klein->with('/users', function () use ($klein) {
$klein->respond('GET', '/?', function ($request, $response) {
// 用戶列表
});
$klein->respond('GET', '/[:id]', function ($request, $response) {
// 獲取單個用戶
});
});
- Klein 支持服務的惰性存儲,可以在首次使用時才初始化。
- Klein 支持參數驗證,可自定義驗證方法。
$service->validateParam('key')->isHex();
$service->validate($username)->isLen(4,16);
$service->validateParam('key', 'The key was invalid')->isHex()->isLen(32);
- Klein 支持對 Phtml 的帶參數渲染。
$service->render('myview.phtml', array('title' => 'My View'));
Klein.php
總結
Klein.php 作為一個輕量的 PHP 路由庫,具備了進行微型 Web 服務應用開發的能力;其基于正則的路由匹配方法自由靈活,方便使用;接口簡潔明了,易于上手使用。
Klein.php 項目結構清晰,代碼注釋和文檔豐富,單元測試完備,同時代碼量不大,代碼質量較高,是一個值得學習的PHP庫。