PHPackages                             leven-framework/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. [Framework](/categories/framework)
4. /
5. leven-framework/router

ActiveLibrary[Framework](/categories/framework)

leven-framework/router
======================

1.1.0(3y ago)220PHPPHP &gt;8.0

Since Apr 17Pushed 3y ago2 watchersCompare

[ Source](https://github.com/leven-framework/router)[ Packagist](https://packagist.org/packages/leven-framework/router)[ RSS](/packages/leven-framework-router/feed)WikiDiscussions master Synced 1mo ago

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

Leven Router
============

[](#leven-router)

Features
--------

[](#features)

- 📝 route parameters
- 🪹 nestable route groups
- 🔧 configure routes with PHP8 attributes
- 💉 dependency injection using [Auryn](https://github.com/rdlowrey/auryn)
- 🔄 reverse routing (controller -&gt; path)
- 🚥 middleware support (before and after)

Basic usage example
-------------------

[](#basic-usage-example)

```
require 'vendor/autoload.php';

($injector = new \Auryn\Injector)->share( $request = \Leven\Router\Messages\Request::fromSuperglobals() );
$rc = new \Leven\Router\RouterConfigurator( $router = new \Leven\Router\Router );

$rc->post('/demo', function(\Leven\Router\Messages\Request $request) {
    return "Hello {$request->body->name}";
});

$rc->get('/test/{id}', function(\Leven\Router\RouteParams $params) {
    return "ID: {$params->id}";
});

(new \Leven\Router\RouteHandler($injector))->handle($router->match($request))->dispatch();
```

Attribute configuration + reverse routing example
-------------------------------------------------

[](#attribute-configuration--reverse-routing-example)

```
require 'vendor/autoload.php';

($injector = new \Auryn\Injector)->share( $request = \Leven\Router\Messages\Request::fromSuperglobals() );
$router = new \Leven\Router\Router;

class MyController {
    #[\Leven\Router\Route('GET', '/foo')]
    public function fooController(){
        return new \Leven\Router\Messages\JsonResponse(['foo' => 'hello']);
    }

    #[\Leven\Router\Route('GET', '/bar')]
    public function barController(\Leven\Router\RouteUrlResolver $url){
        $href = $url([static::class, 'fooController']);
        return new \Leven\Router\Messages\HtmlResponse("foo");
    }
}

(new \Leven\Router\ControllerScanner($router))
    ->scanControllerClasses(MyController::class, );

// RouteUrlResolver allows you to get route path of a given controller
$injector->share( new \Leven\Router\RouteUrlResolver($router) );

(new \Leven\Router\RouteHandler($injector))->handle($router->match($request))->dispatch();
```

Middleware example
------------------

[](#middleware-example)

```
require 'vendor/autoload.php';

($injector = new \Auryn\Injector)->share( $request = \Leven\Router\Messages\Request::fromSuperglobals() );
$rc = new \Leven\Router\RouterConfigurator( $router = new \Leven\Router\Router );

class MyMiddleware {
    function __invoke(\Leven\Router\MiddlewareCallback $next) {
        $response = $next();
        return "before $response->body after";
    }
}

$rc->post('/cool', fn() => "something")->middleware(MyMiddleware::class);

(new \Leven\Router\RouteHandler($injector))->handle($router->match($request))->dispatch();
```

Installation
------------

[](#installation)

PHP 8.1+ is required.

```
composer install leven-framework/router
```

Gotchas
-------

[](#gotchas)

- You're locked into using [Auryn](https://github.com/rdlowrey/auryn) for dependency injection
- No support for other Request or Response classes like PSR-7
- There's no production optimization for scanned routes yet implemented
- This readme is only documentation for now
- No tests written yet

Documentation
-------------

[](#documentation)

```
