Очень легковесный и быстрый роутер.
GET
POST
PUT
DELETE
HEAD
OPTIONS
found
notFound
. Вы можете выполнять действия при срабатывании события (например, логирование и т.д.)$router->dispatch($path, $method)
, вы можете диспатчировать URI в своей логике.autoRoute
.$router->config
composer.json
{
"require": {
"inhere/sroute": "dev-master"
}
}
```- через `composer require`
```bash
composer require inhere/sroute
Время тестирования:
19.11.2018
Этот бенчмарк соответствует последнему маршруту и маршруту, неизвестному системе. Он генерирует случайно префиксированный и суффиксированный маршрут в попытке помешать оптимизации. 1 000 маршрутов, каждый с 9 аргументами.Этот бенчмарк состоит из 14 тестов. Каждый тест выполняется 1,000 раз, результаты обрезаются, а затем усредняются. Значения, которые выходят за пределы 3 стандартных отклонений от среднего, отбрасываются.
Тестовое имя | Результаты | Время (мс) | + Интервал | Изменение |
---|---|---|---|---|
inhere/sroute(Router) - неизвестный маршрут (1000 маршрутов) | 990 | 0.002031 | +0.000871 | 75% медленнее |
inhere/sroute(SRouter) - неизвестный маршрут (1000 маршрутов) | 994 | 0.002895 | +0.001736 | 150% медленнее |
inhere/sroute(Router) - последний маршрут (1000 маршрутов) | 997 | 0.005300 | +0.004141 | 357% медленнее |
inhere/sroute(SRouter) - последний маршрут (1000 маршрутов) | 997 | 0.006467 | +0.005308 | 458% медленнее |
symfony/routing(кэшированный) - неизвестный маршрут (1000 маршрутов) | 976 | 0.012777 | +0.011618 | 1002% медленнее |
symfony/routing(кэшированный) - последний маршрут (1000 маршрутов) | 996 | 0.013608 | +0.012449 | 1074% медленнее |
mindplay/timber - последний маршрут (1000 маршрутов) | 998 | 0.017211 | +0.016052 | 1385% медленнее |
FastRoute - неизвестный маршрут (1000 маршрутов) | 991 | 0.039429 | +0.038270 | 3302% медленнее |
FastRoute(кэшированный) - неизвестный маршрут (1000 маршрутов) | 990 | 0.040800 | +0.039641 | 3420% медленнее |
FastRoute(кэшированный) - последний маршрут (1000 маршрутов) | 999 | 0.045065 | +0.043906 | 3788% медленнее |
FastRoute - последний маршрут (1000 маршрутов) | 999 | 0.064694 | +0.063535 | 5481% медленнее |
Pux PHP - неизвестный маршрут (1000 маршрутов) | 978 | 0.316016 | +0.314857 | 27163% медленнее |
symfony/routing - неизвестный маршрут (1000 маршрутов) | 992 | 0.359482 | +0.358323 | 30912% медленнее |
Pux PHP - последний маршрут (1000 маршрутов) | 999 | 0. 440489 | +0. 439330 | 37901% медленнее |
Macaw - неизвестный маршрут (1000 маршрутов) | 991 | 1. 687441 | +1. 686282 | 145475% медленнее |
Macaw - последний маршрут (1000 маршрутов) | 999 | 1. 786542 | +1. 785383 | 154024% медленнее |
Этот бенчмарк состоит из 7 тестов. Каждый тест выполняется 1000 раз, результаты обрабатываются, а затем усредняются. Значения, которые выходят за пределы 3 стандартных отклонений от среднего, отбрасываются.
Название теста | Результаты | Время | Интервал | Изменение |
---|---|---|---|---|
nikic/fast-route - первое совпадение маршрута(1000) | 998 | 0.002929 | +0.001571 | 116% медленнее |
corneltek/pux(php) - первое совпадение маршрута(1000) | 996 | 0.002971 | +0.001613 | 119% медленнее |
inhere/sroute(Router) - первое(1000) | 979 | 0.006202 | +0.004844 | 357% медленнее |
inhere/sroute(SRouter) - первое(1000) | 999 | 0.006627 | +0.005269 | 388% медленнее |
symfony/routing(cached) - первое совпадение маршрута(1000) | 985 | 0.006858 | +0.005501 | 405% медленнее |
symfony/routing - первое совпадение маршрута(1000) | 995 | 0.023105 | +0.021747 | 1601% медленнее |
nikic/fast-route(cached) - первое совпадение маршрута(1000) | 999 | 0.041133 | +0.039775 | 2929% медленнее |
Macaw - первое совпадение маршрута (1000 маршрутов) | 999 | 1.782017 | +1.780659 | 131128% медленнее |
сначала импортируйте класс
use InHere\Route\Router;
$router = new Router();
// совпадение GET. обработчик использует Closure
$router->get('/', function() {
echo 'hello';
});
// доступ к 'test/john'
$router->get('/test/{name}', function($params) {
echo $params['name']; // 'john'
}, ['name' => '\w+']);
```// совпадение POST
$router->post('/user/login', function() {
var_dump($_POST);
});
// совпадение GET или POST
$router->map(['get', 'post'], '/user/login', function() {
var_dump($_GET, $_POST);
});
// совпадение любого метода
$router->any('/home', function() {
echo 'привет, вы запросили страницу /home';
});
// группа маршрутов
$router->group('/user', function () {
$router->get('/', function () {
echo 'привет. вы доступны: /user/';
});
$router->get('/index', function () {
echo 'привет. вы доступны: /user/index';
});
});
// если вы настроили 'ignoreLastSlash' => true, '/index' равно '/index/'
$router->get('/index', 'app\controllers\Home@index');
```### Динамическое действие
для активации динамического действия, необходимо настроить `'dynamicAction' => true`
> ВНИМАНИЕ: при использовании динамического действия, следует использовать `any()`.
```php
// доступ к '/home/test' вызовет 'app\controllers\Home::test()'
$router->any('/home/{name}', app\controllers\Home::class);
// может соответствовать '/home', '/home/test'
$router->any('/home[/{name}]', app\controllers\Home::class);
если вы настроите 'actionExecutor' => 'run'
// доступ к '/user' вызовет app\controllers\User::run('')
// доступ к '/user/profile' вызовет app\controllers\User::run('profile')
$router->get('/user', 'app\controllers\User');
$router->get('/user/profile', 'app\controllers\User');
// если настроено 'actionExecutor' => 'run' и 'dynamicAction' => true,
// доступ к '/user' вызовет app\controllers\User::run('')
// доступ к '/user/profile' вызовет app\controllers\User::run('profile')
$router->get('/user[/{name}]', 'app\controllers\User');
autoRoute
. 'autoRoute' => 1, // включен
'controllerNamespace' => 'Example\\controllers', // Пространство имен класса контроллера
'controllerSuffix' => 'Controller', // Завершение класса контроллера
// установка конфигурации
$router->config([
'ignoreLastSlash' => true,
// включение autoRoute, работает как в yii фреймворке
// можно получить доступ к '/demo' '/admin/user/info', не требуется настраивать маршруты
'autoRoute' => 1,
'controllerNamespace' => 'Example\\controllers',
'controllerSuffix' => 'Controller',
]);
// здесь стандартная конфигурация.
[
// игнорирование последнего '/' символа. Если значение True, последний '/' будет удален, так что '/home' равно '/home/'
'ignoreLastSlash' => false,
// автоматическая маршрутизация, работает как в yii фреймворке
// Если значение True, будет автоматически найден файл обработчика контроллера.
'autoRoute' => false,
// стандартное пространство имен контроллеров, действует при `'enable' = true`
'controllerNamespace' => '', // пример: 'app\\controllers'
// завершение класса контроллера, действует при `'enable' = true`
'controllerSuffix' => '', // пример: 'Controller'
]
ВНИМАНИЕ: вы должны вызвать
$router->config()
до добавления маршрута.
use InHere\Route\Dispatcher;
$dispatcher = new Dispatcher([
'dynamicAction' => true,
]);
```### События
```php
$dispatcher->on(Dispatcher::ON_FOUND, function ($uri, $route) use ($app) {
$app->logger->debug("Соответствующий путь uri: $uri");
});
// при notFound перенаправить на '/404'
$dispatcher->on('notFound', '/404');
// также можно при notFound вывести сообщение.
$dispatcher->on('notFound', function ($uri) {
echo "страница $uri не найдена!";
});
$router->dispatch($dispatcher);
Пожалуйста, посмотрите коды в папке example
.
Вы можете запустить тестовый сервер командой php -S 127.0.0.1:5670 -t example/static
, теперь пожалуйста перейдите по адресу http://127.0.0.1:5670
MIT
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )