PHPackages                             ngyuki/route-collector - 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. [HTTP &amp; Networking](/categories/http)
4. /
5. ngyuki/route-collector

ActiveLibrary[HTTP &amp; Networking](/categories/http)

ngyuki/route-collector
======================

Simple route collector

v0.0.1(8y ago)01.5kMITPHPPHP &gt;=7.0.10

Since Jan 15Pushed 5y ago1 watchersCompare

[ Source](https://github.com/ngyuki/php-route-collector)[ Packagist](https://packagist.org/packages/ngyuki/route-collector)[ Docs](https://github.com/ngyuki/php-route-collector)[ RSS](/packages/ngyuki-route-collector/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependencies (3)Versions (2)Used By (0)

php-route-collector
===================

[](#php-route-collector)

[![Build Status](https://camo.githubusercontent.com/2ccf9b3a72b8fa9db3adab5ea23f007d237b83d5ad834aa16ee0406018f90fc1/68747470733a2f2f7472617669732d63692e6f72672f6e6779756b692f7068702d726f7574652d636f6c6c6563746f722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/ngyuki/php-route-collector)[![Coverage Status](https://camo.githubusercontent.com/5f32646506818cff4abb42092c6c20f5b96f8920b32d6f0cc1955a22a4d4c6d8/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6e6779756b692f7068702d726f7574652d636f6c6c6563746f722f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/ngyuki/php-route-collector?branch=master)[![Latest Stable Version](https://camo.githubusercontent.com/4f22e9a949f7960e50a5a9e54a483355be464a6b749e5919e81f94207d5674d8/68747470733a2f2f706f7365722e707567782e6f72672f6e6779756b692f726f7574652d636f6c6c6563746f722f76657273696f6e)](https://packagist.org/packages/ngyuki/route-collector)[![Latest Unstable Version](https://camo.githubusercontent.com/25dd863d2d5bb135fe69b0a86fa418aaf6dce7892bb18fd091c97ff6ac326a8e/68747470733a2f2f706f7365722e707567782e6f72672f6e6779756b692f726f7574652d636f6c6c6563746f722f762f756e737461626c65)](//packagist.org/packages/ngyuki/route-collector)[![License](https://camo.githubusercontent.com/94098cbba7b4002aa86176dda73a3644bf27bcf5ed561372453b3fd379a2508a/68747470733a2f2f706f7365722e707567782e6f72672f6e6779756b692f726f7574652d636f6c6c6563746f722f6c6963656e7365)](https://packagist.org/packages/ngyuki/route-collector)

ルート定義をメソッドチェインでできるようにしてはどうかと思って作ったサンプル。

Example
-------

[](#example)

```
$registry = new RouteRegistry();
$r = new RouteCollector($registry);

// GET / -> HomeController::index
$r->path('/')->get()->controller('HomeController')->action('index');

// GET|POST /both -> HomeController::both
$r->path('/both')->get()->post()->controller('HomeController')->action('both');

// GET|POST /both -> HomeController::method
$r->path('/method')->method('GET|POST')->controller('HomeController')->action('method');

$r->controller('UserController')->group(function (RouteCollector $r) {
    $r->path('/user')->group(function (RouteCollector $r) {

        // GET /user -> UserController::index
        $r->get()->action('index');

        // GET /user/create -> UserController::create
        $r->path('/create')->get()->action('create');

        // POST /user/create -> UserController::store
        $r->path('/create')->post()->action('store');
    });
    $r->path('/user/{id}')->group(function (RouteCollector $r) {

        // GET /user/{id} -> UserController::show
        $r->get()->action('show');

        // GET /user/{id}/edit -> UserController::edit
        $r->path('/edit')->get()->action('edit');

        // PUT /user/{id}/edit -> UserController::update
        $r->path('/edit')->put()->action('update');

        // DELETE /user/{id}/edit -> UserController::delete
        $r->path('/edit')->delete()->action('delete');
    });
});

return $registry->getRoutes();
```

詳細
--

[](#詳細)

メソッドチェインを用いた内部 DSL からルート定義の配列を作成するライブラリです。

以下のメソッドでルートを定義します。

- `path(string $path)`
    - URL のリクエストパス
- `get()/post()/put()/patch()/delete()/method(string $method)`
    - リクエストメソッド
- `params(array $params)`
- `param(string $name, mixed $value)`
    - ルートパラメータ

これら以外の名前でマジックメソッドが呼ばれると `param($name, $value)` に置き換えられます。よって、下記の２つの呼び出しは等価です。

```
$r->controller('HomeController')->action('index');
$r->param('controller', 'HomeController')->param('action', 'index');
```

チェインが途切れたところで１つのルートが登録されます。

```
// これで１つのルート定義
$r->path('/')->get()->controller('HomeController')->action('index');
```

チェインの順番を入れ替えても同じ結果になります。

```
// ↑と同じルート定義
$r->action('index')->controller('HomeController')->get()->path('/');
```

リクエストメソッドのチェインを複数つなげると複数のリクエストメソッドにマッチします。

```
// GET と POST の両方にマッチします
$r->path('/')->get()->post()->controller('HomeController')->action('index');
```

リクエストメソッドは `method()` で文字列リテラルでパイプ区切りでも指定できます。

```
// GET と POST の両方にマッチします
$r->path('/')->method('GET|POST')->controller('HomeController')->action('index');
```

`path` のチェインを複数つなげるとパスが連結されます。

```
// '/aaa/bbb' にマッチします
$r->path('/aaa')->path('/bbb')->get()->controller('HomeController')->action('index');
```

`params` のチェインはマージされます。

```
// params(['aaa' => 9, 'bbb' => 2, 'ccc' => 3]) とマージされる
$r->path('/')->get()
    ->params(['aaa' => 1])
    ->params(['aaa' => 9, 'bbb' => 2])
    ->params(['ccc' => 3]);
```

`group` で途中まで定義されたルート定義を元に複数のルート定義ができます。

でチェインの途中で複数のルートを定義できます。

```
$r->controller('UserController')->group(function (RouteCollector $r) {
    // このブロックのルート定義ではコントローラーに UserController が適用される

    $r->get()->path('/users')->action('index');
    $r->post()->path('/users')->action('store');

    $r->path('/user/{id}')->group(function (RouteCollector $r) {
        // このブロックのルート定義ではパスの先頭に /user/{id} が追加される

        // /user/{id}
        $r->get()->action('show');

        // /user/{id}/edit
        $r->get()->path('/edit')->action('edit');
    });
});
```

マジックメソッドの警告を抑止
--------------

[](#マジックメソッドの警告を抑止)

マジックメソッドを使用すると PhpStorm で警告が表示されますが、`RouteCollector` を継承したクラスで `@method` アノテーションを記述すれば大丈夫です。

```
// MyRouteCollector.php

/**
 * @method $this controller(string $controller)
 * @method $this action(string $action)
 */
class MyRouteCollector extends RouteCollector {}
```

```
// routes.php

$registry = new RouteRegistry();
$r = new MyRouteCollector($registry);
```

本来であれば `$this` ではなく `static` にするべきなのですが、なぜか PhpStorm だと `@method` ときに `static` による補完が効かなかったため `$this` にしています。

気になるなら `@method` は使わずに普通にメソッド定義をしてください。これなら `static` でも補完が効きます。

```
// MyRouteCollector.php

class ActionRouteCollector extends RouteCollector
{
    /**
     * @param string $controller
     * @return static
     */
    public function controller($controller)
    {
        return $this->param(__FUNCTION__, $controller);
    }
}
```

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

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

Unknown

Total

1

Last Release

3042d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/59c1a249461372e49b321fd58caa31e68cfa87cee38d3bb572a9993afaa99cab?d=identicon)[ngyuki](/maintainers/ngyuki)

---

Tags

router

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ngyuki-route-collector/health.svg)

```
[![Health](https://phpackages.com/badges/ngyuki-route-collector/health.svg)](https://phpackages.com/packages/ngyuki-route-collector)
```

###  Alternatives

[symfony/routing

Maps an HTTP request to a set of configuration variables

7.6k789.4M1.8k](/packages/symfony-routing)[nikic/fast-route

Fast request router for PHP

5.3k92.4M668](/packages/nikic-fast-route)[altorouter/altorouter

A lightning fast router for PHP

1.3k3.4M68](/packages/altorouter-altorouter)[league/route

Fast routing and dispatch component including PSR-15 middleware, built on top of FastRoute.

6633.1M115](/packages/league-route)[aura/router

Powerful, flexible web routing for PSR-7 requests.

5231.5M67](/packages/aura-router)[coffeecode/router

A classic CoffeeCode Router is easy, fast and extremely uncomplicated. Create and manage your routes in minutes!

181111.1k5](/packages/coffeecode-router)

PHPackages © 2026

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