Wallogit.com
2017 © Pedro Peláez
Simple PHP router class.
Macaw is a simple, open source PHP router. It's super small (~150 LOC), fast, and has some great annotated source code. This class allows you to just throw it into your project and start using it immediately., (*1)
If you have Composer, just include Macaw as a project dependency in your composer.json. If you don't just install it by downloading the .ZIP file and extracting it to your project directory., (*2)
require: {
"noahbuscher/macaw": "dev-master"
}
First, use the Macaw namespace:, (*3)
use \NoahBuscher\Macaw\Macaw;
Macaw is not an object, so you can just make direct operations to the class. Here's the Hello World:, (*4)
Macaw::get('/', function() {
echo 'Hello world!';
});
Macaw::dispatch();
Macaw also supports lambda URIs, such as:, (*5)
Macaw::get('/(:any)', function($slug) {
echo 'The slug is: ' . $slug;
});
Macaw::dispatch();
You can also make requests for HTTP methods in Macaw, so you could also do:, (*6)
Macaw::get('/', function() {
echo 'I <3 GET commands!';
});
Macaw::post('/', function() {
echo 'I <3 POST commands!';
});
Macaw::dispatch();
Lastly, if there is no route defined for a certain location, you can make Macaw run a custom callback, like:, (*7)
Macaw::error(function() {
echo '404 :: Not Found';
});
If you don't specify an error callback, Macaw will just echo 404., (*8)
, (*9)
In order to let the server know the URI does not point to a real file, you may need to use one of the example configuration files., (*10)
It's possible to pass the namespace path to a controller instead of the closure:, (*11)
For this demo lets say I have a folder called controllers with a demo.php, (*12)
index.php:, (*13)
require('vendor/autoload.php');
use \NoahBuscher\Macaw\Macaw;
Macaw::get('/', 'Controllers\demo@index');
Macaw::get('page', 'Controllers\demo@page');
Macaw::get('view/(:num)', 'Controllers\demo@view');
Macaw::dispatch();
demo.php:, (*14)
<?php
namespace controllers;
class Demo {
public function index()
{
echo 'home';
}
public function page()
{
echo 'page';
}
public function view($id)
{
echo $id;
}
}
This is with Macaw installed via composer., (*15)
composer.json:, (*16)
{
"require": {
"noahbuscher/macaw": "dev-master"
},
"autoload": {
"psr-4": {
"" : ""
}
}
}
````
.htaccess:
RewriteEngine On RewriteBase /, (*17)
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d, (*18)
RewriteRule ^(.*)$ index.php?$1 [QSA,L] ```, (*19)