2017 © Pedro Peláez
 

library router

Probably the smallest fully featured PHP Router for web applications ever built

image

phpico/router

Probably the smallest fully featured PHP Router for web applications ever built

  • Monday, October 16, 2017
  • by alrik11es
  • Repository
  • 2 Watchers
  • 2 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Router

Join the chat at https://gitter.im/PHPico/Router Latest Version Software License Build Status Coverage Status Quality Score Total Downloads, (*1)

The PHPico Router is probably the smallest fully featured PHP Router for web applications ever built., (*2)

It's intended for use with light applications. Even for embbeded uses like Raspberrypi., (*3)

Disclaimer: This class could be very useful for absolute noobs. You could learn A LOT just seeing this library code. Model View Controller is totally encouraged and is piece of cake if you know how to use this router. I promise, just one class, just a few lines (Less than 100)., (*4)

Features

  • Very light
  • Intended to be fast
  • Manage GET, POST... types for your request
  • REGEXP based
  • Configuration as array
  • Callbacks allowed

Example code

The next example shows what you can do with this router., (*5)

<?php
include('../vendor/autoload.php');

class HomeController{
    function index(){
        return 'Hello people';
    }

    function greet($a){
        return 'Hello '.$a;
    }
}

$routes = [
    '\/greet\/(.*)' => ['POST', function(){
        return "Oh yeah callbacks :D";
    }],
    '\/greet\/(.*)' => ['GET', 'HomeController@greet'],
    '\/' => 'HomeController'
];

$router = new \PHPico\Router();
echo($router->dispatch($routes));

Regular Expressions

You can use PCRE. The only rule is that any REGEXP is launched as if it has /^.......$/ so you don't need to add the first/end delimiter and the first/end slashes., (*6)

The basic route

There are multiple ways to create a route. But the basic one is this:, (*7)

<?php
$routes = [
    '\/' => 'HomeController'
];

HomeController is an example class in the main namespace. You should add the namespaces if there are any. If you have newer PHP versions you could use php HomeController::class, (*8)

The callback route

You can use any callable to be used as destination. For example this anonymous function:, (*9)

<?php
$routes = [
    '\/greet\/(.*)' => function($a){
        return "Hello ".$a;
    },
];

As you can see you can add params in order to get the capture of the REGEXP. (.*) Means capture any character, zero or more times. Then just add the $a var to recover this capture., (*10)

HTTP Request type segmentation

By default any route unless specified will allow any type of request. But you can segment the route for one or more specific requests. For example:, (*11)

<?php
$routes = [
    '\/' => ['POST','HomeController']
];

This means that any request to the / path will return false unless you make a POST request., (*12)

You can even add more than one option, like:, (*13)

<?php
$routes = [
    '\/' => ['GET', 'POST','HomeController']
];

Handling 404

The router component will return false if the route is not found. Simple and effective., (*14)

<?php
if($router->dispatch($routes) === false){
    header("HTTP/1.0 404 Not Found");
    die('Not found');
}

Have any idea on how to improve?

If you have any idea of how to improve this library you're welcome to submit a pull request with your improvement or fix. Remember that the idea is to keep the codebase the smallest possible., (*15)

The Versions

16/10 2017

dev-master

9999999-dev

Probably the smallest fully featured PHP Router for web applications ever built

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

router

06/04 2016

1.0.0-RC2

1.0.0.0-RC2

Probably the smallest fully featured PHP Router for web applications ever built

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

The Development Requires

router

02/04 2016

1.0.0-RC1

1.0.0.0-RC1

Probably the smallest fully featured PHP Router for web applications ever built

  Sources   Download

MIT

The Requires

  • php >=5.4.0

 

router