vakata/httprouter

An extended implementation of the routing class, dealing with an HTTP abstraction and middleware.

3.0.3 2016-10-27 11:39 UTC

This package is auto-updated.

Last update: 2024-12-10 05:57:26 UTC


README

Latest Version on Packagist Software License Build Status Code Climate Tests Coverage

An extended implementation of the routing class, dealing with an HTTP abstraction and middleware.

Install

Via Composer

$ composer require vakata/httprouter

Usage

// create an instance
$httprouter = new \vakata\httprouter\HttpRouter();
$httprouter
    ->get('/', function () { echo 'homepage'; })
    ->get('/profile', function () { echo 'user profile'; })
    ->group('/books/', function ($httprouter) { // specify a prefix
        $httprouter
            ->get('read/{i:id}', function ($matches) {
                // this method uses a named placeholder
                // when visiting /books/read/10 matches will contain:
                var_dump($matches); // 0 => books, 1 => read, 2 => 10, id => 10
                // placeholders are wrapped in curly braces {...} and can be: 
                //  - i - an integer
                //  - a - any letter (a-z)
                //  - h - any letter or integer
                //  - * - anything (up to the next slash (/))
                //  - ** - anything (to the end of the URL)

                // placeholders can be named too by using the syntax:
                // {placeholder:name}
                
                // placeholders can also be optional
                // {?optional}
            })
            // for advanced users - you can use any regex as a placeholder:
            ->get('{(delete|update):action}/{(\d+):id}', function ($matches) { })
            // you can also use any HTTP verb
            ->post('delete/{i:id}', function ($matches) { })
    })
    // you can also bind multiple HTTP verbs in one go
    ->add(['GET', 'HEAD'], '/path', function () { });

// there is no need to chain the method calls - this works too:
$httprouter->post('123', function () { });
$httprouter->post('456', function () { });

// you finally run the httprouter
try {
    $httprouter->run(
        parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH),
        $_SERVER['REQUEST_METHOD']
    );
} catch (\vakata\router\RouterNotFoundException $e) {
    // thrown if no matching route is found
}

Read more in the API docs

Testing

$ composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email github@vakata.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.