Skip to content

Router for PHP. Simple, lightweight and convenient.

License

Notifications You must be signed in to change notification settings

delight-im/PHP-Router

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP-Router

Router for PHP. Simple, lightweight and convenient.

Requirements

  • PHP 5.6.0+

Installation

  1. Include the library via Composer [?]:

    $ composer require delight-im/router
    
  2. Include the Composer autoloader:

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

Usage

  1. Enable URL rewriting on your web server

    • Apache (in .htaccess or httpd.conf)

      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule . index.php [L]
      
    • Nginx (in nginx.conf)

      try_files $uri /index.php;
      
  2. Create a new Router instance

    • for the web root

      $router = new \Delight\Router\Router();
    • for any subdirectory

      $router = new \Delight\Router\Router('/my/base/path');
  3. Add some routes and map them to anonymous functions or closures

    • Static route:

      $router->get('/', function () {
          // do something
      });
    • Dynamic route (with parameters):

      $router->get('/users/:id/photo', function ($id) {
          // get the photo for user `$id`
      });

      The values of parameters matched in the URL can be captured as arguments in the callback.

    • Route with multiple supported request methods:

      $router->any([ 'POST', 'PUT' ], '/users/:id/address', function ($id) {
          // update the address for user `$id`
      });
  4. Map routes to controller methods instead for more complex callbacks

    // use static methods
    $router->get('/photos/:id/convert/:mode', [ 'PhotoController', 'myStaticMethod' ]);
    
    // or
    
    // instance methods
    $router->get('/photos/:id/convert/:mode', [ $myPhotoController, 'myInstanceMethod' ]);
  5. Inject arguments for access to further values and objects (prepended to those matched in the route)

    class MyController {
    
        public static function someStaticMethod($database, $uuid) {
            // do something
        }
    
    }

    and

    $database = new MyDatabase();
    
    // ...
    
    $router->delete('/messages/:uuid', [ 'MyController', 'someStaticMethod' ], [ $database ]);

Contributing

All contributions are welcome! If you wish to contribute, please create an issue first so that your feature, problem or question can be discussed.

License

This project is licensed under the terms of the MIT License.

About

Router for PHP. Simple, lightweight and convenient.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages