dev-master
9999999-dev https://github.com/noahbuscher/MacawSimple PHP router class.
MIT
The Requires
- php >=5.3.3
The Development Requires
by Noah Buscher
php router php-router
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'm a GET request!'; }); Macaw::post('/', function() { echo 'I'm a POST request!'; }); Macaw::any('/', function() { echo 'I can be both a GET and a POST request!'; }); 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)
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., (*9)
It's possible to pass the namespace path to a controller instead of the closure:, (*10)
For this demo lets say I have a folder called controllers with a demo.php, (*11)
index.php:, (*12)
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:, (*13)
<?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., (*14)
composer.json:, (*15)
{ "require": { "noahbuscher/macaw": "dev-master" }, "autoload": { "psr-4": { "" : "" } } } ```` .htaccess(Apache):
RewriteEngine On RewriteBase /, (*16)
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d, (*17)
RewriteRule ^(.*)$ index.php?$1 [QSA,L], (*18)
.htaccess(Nginx):
rewrite ^/(.*)/$ /$1 redirect;, (*19)
if (!-e $request_filename){ rewrite ^(.*)$ /index.php break; }, (*20)
```, (*21)
Simple PHP router class.
MIT
php router php-router