輕量級PHP路由庫:Klein
Klein 是一款針對 PHP5.3+ 版本的輕量級路由庫,速度相當快。
-
靈活的正則表達式路由規則 (靈感來自 Sinatra)
-
提供一組樣板方法用于快速構建 Web 應用
-
幾乎沒有開銷 => 2500+ requests/second
示例代碼:
Hello World - Obligatory hello world example
<?php
require_once __DIR__ . '/vendor/autoload.php';
$klein = new \Klein\Klein();
$klein->respond('GET', '/hello-world', function () {
return 'Hello World!';
});
$klein->dispatch(); Example 1 - Respond to all requests
$klein->respond(function () {
return 'All the things';
}); Example 2 - Named parameters
$klein->respond('/[:name]', function ($request) {
return 'Hello ' . $request->name;
}); Example 3 - So RESTful
$klein->respond('GET', '/posts', $callback);
$klein->respond('POST', '/posts/create', $callback);
$klein->respond('PUT', '/posts/[i:id]', $callback);
$klein->respond('DELETE', '/posts/[i:id]', $callback);
$klein->respond('OPTIONS', null, $callback);
// To match multiple request methods:
$klein->respond(array('POST','GET'), $route, $callback);
// Or you might want to handle the requests in the same place
$klein->respond('/posts/[create|edit:action]?/[i:id]?', function ($request, $response) {
switch ($request->action) {
//
}
}); Example 4 - Sending objects / files
$klein->respond(function ($request, $response, $service) {
$service->xml = function ($object) {
// Custom xml output function
}
$service->csv = function ($object) {
// Custom csv output function
}
});
$klein->respond('/report.[xml|csv|json:format]?', function ($request, $response, $service) {
// Get the format or fallback to JSON as the default
$send = $request->param('format', 'json');
$service->$send($report);
});
$klein->respond('/report/latest', function ($request, $response, $service) {
$service->file('/tmp/cached_report.zip');
}); Example 5 - All together
$klein->respond(function ($request, $response, $service, $app) use ($klein) {
// Handle exceptions => flash the message and redirect to the referrer
$klein->onError(function ($klein, $err_msg) {
$klein->service()->flash($err_msg);
$klein->service()->back();
});
// The third parameter can be used to share scope and global objects
$app->db = new PDO(...);
// $app also can store lazy services, e.g. if you don't want to
// instantiate a database connection on every response
$app->register('db', function() {
return new PDO(...);
});
});
$klein->respond('POST', '/users/[i:id]/edit', function ($request, $response, $service, $app) {
// Quickly validate input parameters
$service->validateParam('username', 'Please enter a valid username')->isLen(5, 64)->isChars('a-zA-Z0-9-');
$service->validateParam('password')->notNull();
$app->db->query(...); // etc.
// Add view properties and helper methods
$service->title = 'foo';
$service->escape = function ($str) {
return htmlentities($str); // Assign view helpers
};
$service->render('myview.phtml');
});
// myview.phtml:
<title><?php echo $this->escape($this->title) ?></title> Route namespaces
$klein->with('/users', function () use ($klein) {
$klein->respond('GET', '/?', function ($request, $response) {
// Show all users
});
$klein->respond('GET', '/[:id]', function ($request, $response) {
// Show a single user
});
});
foreach(array('projects', 'posts') as $controller) {
// Include all routes defined in a file under a given namespace
$klein->with("/$controller", "controllers/$controller.php");
}
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!