PHPackages                             ddrv/router - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ddrv/router

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ddrv/router
===========

yet one router

v1.0.0(2y ago)07MITPHPPHP ^7.4 || ^8.0

Since Dec 22Pushed 2y ago1 watchersCompare

[ Source](https://github.com/ddrv/php-router)[ Packagist](https://packagist.org/packages/ddrv/router)[ Fund](https://donation.ddrv.ru)[ RSS](/packages/ddrv-router/feed)WikiDiscussions 1.x Synced 1mo ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

ddrv/router
===========

[](#ddrvrouter)

Install
-------

[](#install)

```
composer require ddrv/router:^1.0
```

Usage
-----

[](#usage)

```
/**
 * \Ddrv\Router\Router is a union of:
 * - Ddrv\Router\Entity\RouteRegister
 * - Ddrv\Router\Entity\RouteDispatcher
 * - Ddrv\Router\Entity\UriGenerator
 */
$router = new \Ddrv\Router\Router();

// Register routes
$router->get('/hello/{name}', 'getHelloHandler')->name('hello')->where('name', '[a-z]+')->middleware('HttpCache');

$router->group('/api', function (\Ddrv\Router\Contract\RouteGroupInterface $group) {
    $group->get('/resources', 'ApiResourceListHandler')
    $group->post('/resources', 'ApiResourceCreateHandler')
    $group->options('/resources', 'ApiResourceOptionsHandler')
    $group->group('/resources', function (\Ddrv\Router\Contract\RouteGroupInterface $group) {
        $group->get('/{id}', 'ApiResourceShowHandler')->where('id', '\d+')
        $group->put('/{id}', 'ApiResourceReplaceHandler')->where('id', '\d+')
        $group->patch('/{id}', 'ApiResourceModifyHandler')->where('id', '\d+')
        $group->delete('/{id}', 'ApiResourceDeleteHandler')->where('id', '\d+')
        $group->options('/{id}', 'ApiResourceOptionsHandler')->where('id', '\d+')
    });
})->middleware('ApiAuthMiddleware');

// Dispatch
$result = $router->dispatch('GET', '/hello/world');
$result->getPathParameters();               // ['name' => 'world']
$result->getRoute()->getHandler();          // 'getHelloHandler'
$result->getRoute()->getMethods();          // ['GET']
$result->getRoute()->getPattern();          // '/hello/{name}'
$result->getRoute()->getName();             // 'hello'
$result->getRoute()->getParameterRegexps(); // ['name' => '[a-z]+']
$result->getRoute()->getMiddlewares();      // iterator with one element 'HttpCache'

try {
    $router->dispatch('POST', '/hello/world');
} catch (\Ddrv\Router\Exception\MethodNotAllowed $exception) {
    $exception->getAllowedMethods(); // ['GET']
}

try {
    $router->dispatch('GET', '/');
} catch (\Ddrv\Router\Exception\RouteNotFound $exception) {
}

// URI generation
$router->uri('hello', ['name' => 'world'], ['from' => 'me'], 'https://dev.io'); // 'https://dev.io/hello/world?from=me'
$router->uri('hello', ['name' => 'world'], ['from' => 'me']);                   // '/hello/world?from=me'
$router->uri('hello', ['name' => 'world']);                                     // '/hello/world'

try {
    $router->uri('hello');
} catch (\Ddrv\Router\Exception\ParametersRequired $exception) {
    $exception->getRequiredParameters(); // ['name']
}

try {
    $router->uri('home');
} catch (\Ddrv\Router\Exception\UndefinedRoute $exception) {
}
```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

874d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ea2891b82f2e0019d838940e1a73fb1af3baeb0d6c06f966ee4b3d6b7278b528?d=identicon)[ddrv](/maintainers/ddrv)

---

Top Contributors

[![ddrv](https://avatars.githubusercontent.com/u/24430614?v=4)](https://github.com/ddrv "ddrv (2 commits)")

---

Tags

phprouter

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/ddrv-router/health.svg)

```
[![Health](https://phpackages.com/badges/ddrv-router/health.svg)](https://phpackages.com/packages/ddrv-router)
```

###  Alternatives

[artisansdk/cqrs

A foundational package for Command Query Responsibility Segregation (CQRS) compatible with Laravel.

8414.1k](/packages/artisansdk-cqrs)[corneltek/class-template

Class template Utilities

14158.1k3](/packages/corneltek-class-template)[genealabs/php-coding-standards

1654.8k1](/packages/genealabs-php-coding-standards)[lukaskleinschmidt/kirby-types

Kirby Types

225.9k1](/packages/lukaskleinschmidt-kirby-types)[yuansfer/yuansfer-php-sdk

Yuansfer PHP SDK

117.7k](/packages/yuansfer-yuansfer-php-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
