superatom / routing
dev-master
2015-08-16 15:09 UTC
Requires
- php: >5.6.0
- nikic/fast-route: ^0.6
- symfony/http-foundation: ~2.0
Requires (Dev)
- fabpot/php-cs-fixer: ~1.0
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-08-28 04:25:48 UTC
README
这个库提供了一个基于正则表达式的快速路由。
致谢
原始的正则表达式匹配实现由 nikic/FastRoute 提供。
非常感谢 nikic 和其他贡献者。
安装
在 composer.json 中要求此包
"superatom/routing": "1.*"
用法
示例:Hello World
<?php
require_once '/path/to/vendor/autoload.php';
$handler = new \Superatom\Routing\RouteHandler();
$generator = new \Superatom\Routing\RouteDataGenerator();
$router = new \Superatom\Routing\Router($handler, $generator);
$router->get('/', function()
{
return 'Hello world!';
});
echo $router->handle($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
保存为 hello.php
然后在终端中运行 php -S localhost:8080 hello.php
在浏览器中打开 localhost:8080/
带参数的路由
$router->get('/hello/:name', function($name)
{
return "Hello {$name}!";
}, $name_for_this_route = 'hello');
在浏览器中打开 localhost:8080/hello/atom
反向路由
$router->get('/:var1/:var2', function($var1, $var2)
{
return "got {$var1} and {$var2}";
}, 'route1');
echo $router->urlFor('route1', ['var1' => 'hoge', 'var2' => 'piyo']);
自定义路由处理程序
use \Superatom\Routing\Route;
class ControllerHandler implements \Superatom\Routing\RouteHandlerInterface
{
/**
* @param Route $route
* @return mixed
*/
public function handleRoute(Route $route)
{
list($class, $method) = explode('@', $route->getHandler());
$controller = new $class();
// controller setup...
// e.g. Dependency injection
$handler = [$controller, $method];
return call_user_func_array($handler, $route->getVariables());
}
}
class HelloController
{
public function greeting($name)
{
return "Hello {$name}!";
}
}
$handler = new ControllerHandler();
$generator = new \Superatom\Routing\RouteDataGenerator();
$router = new \Superatom\Routing\Router($handler, $generator);
$router->get('/hello/:name', 'HelloController@greeting');
echo $router->handle($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
在浏览器中打开 localhost:8080/hello/atom
许可证
MIT