Macaw é um roteador PHP simples e de código aberto. É super pequeno (~150 LOC), rápido e possui um excelente código-fonte anotado. Esta classe permite que você simplesmente coloque-o em seu projeto e comece a usá-lo imediatamente.
Se você possui o Composer, basta incluir o Macaw como dependência do projeto no seu composer.json
. Caso contrário, basta instalá-lo baixando o arquivo .ZIP e extraindo-o para o diretório do projeto.
require: {
"noahbuscher/macaw": "dev-master"
}
Primeiro, use
o namespace Macaw:
use NoahBuscher Macaw Macaw ;
Macaw não é um objeto, então você pode apenas fazer operações diretas na classe. Aqui está o Olá Mundo:
Macaw:: get ( ' / ' , function () {
echo ' Hello world! ' ;
});
Macaw:: dispatch ();
Macaw também oferece suporte a URIs lambda, como:
Macaw:: get ( ' /(:any) ' , function ( $ slug ) {
echo ' The slug is: ' . $ slug ;
});
Macaw:: dispatch ();
Você também pode fazer solicitações de métodos HTTP no Macaw, então você também pode fazer:
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();
Por último, se não houver uma rota definida para um determinado local, você pode fazer com que o Macaw execute um callback personalizado, como:
Macaw:: error ( function () {
echo ' 404 :: Not Found ' ;
});
Se você não especificar um retorno de chamada de erro, o Macaw apenas ecoará 404
.
Para informar ao servidor que o URI não aponta para um arquivo real, pode ser necessário usar um dos arquivos de configuração de exemplo.
Para esta demonstração, digamos que eu tenha uma pasta chamada controllers com um demo.php
index.php:
require ( ' vendor/autoload.php ' );
use NoahBuscher Macaw Macaw ;
Macaw:: get ( ' / ' , ' Controllersdemo@index ' );
Macaw:: get ( ' page ' , ' Controllersdemo@page ' );
Macaw:: get ( ' view/(:num) ' , ' Controllersdemo@view ' );
Macaw:: dispatch ();
demonstração.php:
<?php
namespace Controllers ;
class Demo {
public function index ()
{
echo ' home ' ;
}
public function page ()
{
echo ' page ' ;
}
public function view ( $ id )
{
echo $ id ;
}
}
Isso é com o Macaw instalado via compositor.
compositor.json:
{
"require": {
"noahbuscher/macaw": "dev-master"
},
"autoload": {
"psr-4": {
"" : ""
}
}
}
.htaccess(Apache):
RewriteEngine On
RewriteBase /
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
.htaccess(Nginx):
rewrite ^/(.*)/$ /$1 redirect;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}