kiev / router
请求路由器。
dev-master
2013-12-12 00:19 UTC
Requires
- php: >=5.3.0
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-24 01:43:15 UTC
README
描述
一个用于处理请求的PHP轻量级库。
安装
您可以通过composer安装
{
"require": {
"kiev/router": "dev-master"
}
}
基本用法
<?php use Kiev\Router\Router; use Kiev\Router\Route; $router = new Router(); /** Appending routes to router */ $index = new Route('GET', '/', 'my_controller'); $router->addRoute($index); $users = new Route('GET', '/users', 'my_controller'); $router->addRoute($users); $user = new Route('GET', '/users/*', 'my_controller'); $router->addRoute($user); $messages = new Route('GET', '/users/*/messages', 'my_controller'); $router->addRoute($messages); $message = new Route('GET', '/users/*/messages/*', 'my_controller'); $router->addRoute($message); /** Router returns a Kiev\Router\Result instance **/ $result = $router->run($_SERVER); echo 'My target is: ' . $result->getTarget(); echo 'The method used is: ' . $result->getMethod(); echo 'The params are: ' . PHP_EOL . print_r($result->getParams());
路由
Kiev根据资源将URI与资源标识符配对,资源标识符不是必需的,但当你想使用它时,你可以使用一个*来表示它作为一个参数。以下是一些示例
/
/users/
/users/*/
/users/*/messages/
/users/*/messages/*/
警告:在路由时,Kiev将忽略查询字符串。
路由
路由需要在构造函数中传递三个参数
- 方法:HTTP方法
- uri
- 目标:类名、闭包、自定义名称或任何你想要的东西
您可以使用类或数组来配置路由器。如果您使用数组,内部,路由器将创建一个Route对象
<?php use Kiev\Router\Router; use Kiev\Router\Route; $router = new Router(); /** Appending routes to router */ $index = new Route('GET', '/', 'my_controller'); $router->addRoute($index); $users = array('method' => 'GET', 'uri' => '/users', 'target' => 'my_controller'); $router->addRoute($users);
在创建路由时,它验证方法,因此如果方法不是有效的HTTP方法(GET、POST、PUT、DELETE、HEAD),则会抛出InvalidArgumentException。
结果
结果对象只是用来表示匹配的路由,并且只有三个属性
- 目标:你在路由中指定的目标;
- 方法:请求方法;
- 参数:uri中找到的参数数组;
它们可以通过访问器方法访问
<?php // ... $result = $router->run($_SERVER); echo 'My target is: ' . $result->getTarget(); echo 'The method used is: ' . $result->getMethod(); echo 'The params are: ' . PHP_EOL . print_r($result->getParams());
分发
分发不是项目的目标,所以你必须自己处理。你可以用你的类名、闭包、别名或任何你想要的东西来做。以下是一些示例
<?php // Class Names $route = new Route('GET', '/', 'MyPack\MyController'); $router->addRoute($route); $result = $router->run($_SERVER); $controller = $result->getTarget(); $method = $result->getMethod(); $params = $result->getParams(); $instance = new $controller; echo $instance->$method($params); // Closures $route = new Route('GET', '/', function($params) { print_r($params) }); $router->addRoute($route); $result = $router->run($_SERVER); $target = $result->getTarget(); $params = $result->getParams(); echo call_user_func_array($target, $params);