plumbus / router
此软件包最新版本(0.1.5)没有可用的许可信息。
Plumbus最简单的路由器
0.1.5
2016-04-27 14:47 UTC
Requires
- php: >=7.0.0
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: 4.*
README
轻量级且快速的PHP请求路由
用途是什么?
这是一个简单的路由器,用于将URL中的某些路径与某些值匹配。例如,我们需要将路径 /news/100/edit 与 "news_edit" 匹配,这是配置控制器中请求页面的键。路由器使用“路由表”——一个数组,其键表示URL的一部分,并可能包含值。
- 空值 - 正是这个页面,
- %s - 任何字符串
- %d - 任何数字
- 任何字符串 - 正是这个字符串。
在此期间,数组中的值是字符串或回调函数,它们在路由解析成功时会被调用。为了将URL请求的部分转换为变量,可以在路由键旁边使用等号指定变量名 - 例如,'%s=some_variable' 表示这个URL部分是任何字符串,并且应该作为名为 some_variable 的变量可用。
安装
要安装,请使用composer的配置 - 在 composer.json 文件的require部分中添加
Для проверки работоспособности, можно запустить unit-тестирование командой
```
# vendor/phpunit/phpunit/phpunit --color src/
PHPUnit 4.8.21-5-gacbb9e4 by Sebastian Bergmann and contributors.
.......
Time: 598 ms, Memory: 4.00Mb
OK (7 tests, 22 assertions)
```
### Использование ###
#### Пример 1 ####
В Этом примере мы задаем 2 роутинга - для методов PUT и DELETE.
Затем выполняем роутинг 2 раза - для обоих методов.
Нектороые части пути содержат некоторые значения после %s или %d - значит, они попадут
как переменные в массив variables и будут содержать конкретные значения.
```
$router = new Router();
$router->setTrailingSlashBehavior(
Router::TRAILING_SLASH_BEHAVIOR_IGNORE
);
/**
* set routing for rule "DELETE"
*/
$router->setRoutingMap(
[
'item' => [
'%s=var1' => [
'%s=var2' => 'DELETE_ITEM',
]
]
],
'DELETE'
);
/**
* set routing for rule "PUT"
*/
$router->setRoutingMap(
[
'item' => [
'%s' => [
'%d=myCustomVariable3' => 'PUT_ITEM',
]
]
],
'PUT'
);
/**
* resolve map by DELETE rule
*/
$variables = [];
$this->assertEquals('DELETE_ITEM', $router->route('/item/value1/value2', 'DELETE', $variables));
/**
* resolve map by PUT rule
*/
$this->assertEquals('PUT_ITEM', $router->route('/item/loasdll/100000', 'PUT', $variables));
/**
* checking variables
*/
$this->assertEquals('value1', $variables['var1']);
$this->assertEquals('value2', $variables['var2']);
$this->assertEquals('100000', $variables['myCustomVariable3']);
```
#### Пример 2 ####
Живой пример - есть контроллер для отрисовки поста автора и такой роутинг к нему:
```
$router = new Router();
$router->setTrailingSlashBehavior(
Router::TRAILING_SLASH_BEHAVIOR_IGNORE
);
/**
* set routing for rule "GET"
*/
$router->setRoutingMap(
[
'author' => [
'%s=authorName' => [
'%d=postId' => 'author_post',
]
]
],
'GET'
);
$variables = [];
$controllerName = $router->route('/author/tema/100500', 'GET', $variables);
echo 'controller:' . $controllerName . "\nvariables:\n";
print_r($variables);
```
Вывод:
```
controller:author_post
variables:
Array
(
[authorName] => tema
[postId] => 100500
)
```
#### Пример 3 ####
Добавление правил роутинга с помощью массивов или строк:
```
$router = new Router();
$router->addRoutingRule(['%s=var1' => ['%d=var2' => 'varvar']]);
$variables = [];
$this->assertEquals('varvar', $router->route('/bla/100500', $variables));
$this->assertEquals('bla', $variables['var1']);
$this->assertEquals('100500', $variables['var2']);
$router->addRoutingRule('/%s/%s/%s', 'some_page1');
$this->assertEquals('some_page1', $router->route('/bla/bla/bla'));
```
### ПОМОЩЬ И ПОДДЕРЖКА ###
you can send any questions to amuhc@yandex.ru