1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/inhere-php-srouter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_en.md 14 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 23.04.2025 07:57 22ca927

Простой роутер для PHP

Лицензия Версия PHP Последняя стабильная версия Статус сборки Статус покрытия

Очень легковесный и быстрый роутер.

  • Легковесный и быстрый, скорость поиска не зависит от количества маршрутов
  • Поддерживаемые методы запроса: GET POST PUT DELETE HEAD OPTIONS
  • Поддержка событий: found notFound. Вы можете выполнять действия при срабатывании события (например, логирование и т.д.)
  • Поддержка ручного диспатчирования URI-маршрута с помощью $router->dispatch($path, $method), вы можете диспатчировать URI в своей логике.
  • Поддержка автоматического соответствия маршрутов, подобно фреймворку Yii, путем конфигурации 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% медленнее

Первое совпадение маршрутаЭтот бенчмарк проверяет, насколько быстро каждый маршрутизатор может найти первое совпадение маршрута. 1000 маршрутов, каждый с 9 аргументами.

Этот бенчмарк состоит из 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/inhere-php-srouter.git
git@api.gitlife.ru:oschina-mirror/inhere-php-srouter.git
oschina-mirror
inhere-php-srouter
inhere-php-srouter
master