Criando rotas (URLs amigáveis) com Inphinit PHP framework

Antes de começar leia: https://github.com/inphinit/inphinit/wiki/Estrutura-das-pastas
Uso básico
No main.php você pode criar as rotas assim:
<?php
use Inphinit\App;
use Inphinit\Routing\Route;//Rota Index, o ANY permite qualquer método HTTP
Route::set('ANY', '/', 'Home:index');//Closure
Route::set('ANY', '/closure', function () {
return 'Olá, Mundo!';
});//Closure e use
$data = 'Mary';Route::set('ANY', '/closure-use', function () use ($data) {
return 'Olá ' . $data . '!';
});//Rota com expressão regular, você pode navegar assim http://[server]/user/mary ou http://[server]/user/john
Route::set('ANY', '/user/{:[a-z0-9_.]+:}', 'Users.Profile:show');Route::set('GET', '/fooget', 'Foo:get'); //Permite somente o método GET do HTTP
Route::set('POST', '/foopost', 'Foo:post'); //Permite somente o método POST do HTTP
Route::set('PUT', '/fooput', 'Foo:put'); //Permite somente o método PUT do HTTP
Route::set('HEAD', '/foohead', 'Foo:head'); //Permite somente o método HEAD do HTTP//Permite GET e POST
Route::set(array('GET', 'POST'), '/foo', 'Foo:method');//Permite GET, HEAD e POST
Route::set(array('GET', 'HEAD', 'POST'), '/foo', 'Foo:method');// Se estiver usando PHP 5.4+
Route::set(['GET', 'HEAD', 'POST'], '/foo', 'Foo:method');
Leia mais sobre o uso de {::} em Expressão Regular
Controllers
Controllers usam . (ponto) como separador/delimitador do namespace e : como delimitador do método/função do Controller:
- Usar ‘Foo:get’ é o mesmo que \Controller\Foo::get();
- Usar ‘Users.Profile:show’ é o mesmo que \Controller\Users\Profile::show();
- Usar ‘Baz.Bar.Foo:foobar’ é o mesmo que \Controller\Baz\Bar\Foo::foobar();
Veja mais detalhes em Usando Controllers
Gropo de Routes
Este recurso é Experimental
Para usar primeiro adicione Inphinit\Experimental\Routing\Group no main.php, por exemplo:
<?php
use Inphinit\App;
use Inphinit\Routing\Route;
use Inphinit\Experimental\Routing\Group;
Criando um grupo pelo caminho do endereço (path)
Todas as rotas definidas dentro de then são relativas ao path, por exemplo:
Group::create()->path('/foo/bar/')->then(function () {
Route::set('GET', '/', 'Foo:index'); // Acesse http://example/foo/bar/
Route::set('GET', '/abc', 'Foo:bar'); // Acesse http://example/foo/bar/abc
Route::set('GET', '/xyz/', 'Foo:baz'); // Acesse http://example/foo/bar/xyz/
});
Criando um grupo pelo domínio
Todas rotas em then são apenas disponíveis no domínio definido em domain, por exemplo:
// Se acessar o domínio www.example.com
Group::create()->domain('www.example.com')->then(function () {
Route::set('GET', '/', 'Foo:index'); // Acesse até http://example.com/
Route::set('GET', '/abc', 'Foo:bar'); // Acesse http://example.com/abc
Route::set('GET', '/xyz/', 'Foo:baz'); // Acesse http://example.com/xyz/
});// Se acessar o subdominio foo.example.com
Group::create()->domain('foo.example.com')->then(function () {
Route::set('GET', '/', 'Foo:index'); // Acesse http://foo.example.com/
Route::set('GET', '/abc', 'Foo:bar'); // Acesse http://foo.example.com/abc
Route::set('GET', '/xyz/', 'Foo:baz'); // Acesse http://foo.example.com/xyz/
});// Um domínio diferente, por exemplo site2.com
Group::create()->domain('site2.com')->then(function () {
Route::set('GET', '/', 'Foo:index'); // Acesse http://site2.com/
Route::set('GET', '/abc', 'Foo:bar'); // Acesse http://site2.com/abc
Route::set('GET', '/xyz/', 'Foo:baz'); // Acesse http://site2.com/xyz/
});
Usando expressão regular no domínio/sub-domínio:
Group::create()->domain('{:[a-z0-9_\-]+:}.example.com')->then(function ($subdomain) {
//$subdomain retorna "foo" se navegar em foo.example.com (e é óbvio que o dominio deve existir)
//$subdomain retorna "john" if navigate to john.example.com
Route::set('GET', '/', 'Foo:index');
});
Criando um grupo com prefixo nos Controllers
Isto:
Group::create()->prefixNS('Baz.Bar')->then(function () {
Route::set('GET', '/', 'Foo:index');
Route::set('GET', '/about', 'Foo:about');
Route::set('GET', '/contact', 'Foo:contact');
Route::set('GET', '/inphinit', 'Inphinit:index'); Quick::create('MyClass')->prepare();
});
É equivalente:
Route::set('GET', '/', 'Baz.Bar.Foo:index');
Route::set('GET', '/about', 'Baz.Bar.Foo:about');
Route::set('GET', '/contact', 'Baz.Bar.Foo:contact');
Route::set('GET', '/inphinit', 'Baz.Bar.Inphinit:index');Quick::create('Baz.Bar.MyClass')->prepare();
Criando rotas baseadas em um Controller
Este recurso é Experimental
Para usar primeiro adicione Inphinit\Experimental\Routing\Quick no main.php, por exemplo:
<?php
use Inphinit\App;
use Inphinit\Routing\Route;
use Inphinit\Experimental\Routing\Quick;
Você pode definir o métodos Controller para criar as rotas com Inphinit\Experimental\Quickassim:
public function getIndex(); //Acesse http://example/ usando GET
public function postIndex(); //Acesse http://example/ usando POST
public function anyIndex(); //Acesse http://example/ usando qualquer método HTTPpublic function anyFoo(); //Acesse http://example/foo qualquer método HTTP
public function anyFooBar(); //Acesse http://example/foo-bar qualquer método HTTP
public function anyFooBarBazXyz(); //Acesse http://example/foo-bar-baz-xyz qualquer método HTTP
Usando a classe Quick
Crie um Controller assim application/Controller/MinhaClasse.php por exemplo:
<?php
namespace Controller;class MinhaClasse
{
public function getIndex()
{
return 'Olá, Mundo!';
} public function getAbout()
{
return 'Sobre a empresa!';
}
}
E adicione no seu main.php:
/*
* Cria estas rotas:
* - http://example/
* - http://example/about/
*/Quick::create('MinhaClasse')->prepare();
Outros exemplos:
/*
* Irá gerar estas rotas (Quick::BOTH é opcional/por defeito):
* - http://example/
* - http://example/about
* - http://example/about/
*/
Quick::create('MinhaClasse')->canonical(Quick::BOTH)->prepare();/*
* Irá gerar estas rotas:
* - http://example/
* - http://example/about/
*/
Quick::create('MinhaClasse')->canonical(Quick::SLASH)->prepare();/*
* Irá gerar estas rotas:
* - http://example/
* - http://example/about
*/
Quick::create('MinhaClasse')->canonical(Quick::NOSLASH)->prepare();/*
* Irá gerar estas rotas:
* - http://example/foo/bar/baz/
* - http://example/foo/bar/baz/about
* - http://example/foo/bar/baz/about/
*/
Group::create()->path('/foo/bar/baz/')->then(function () {
Quick::create('MinhaClasse')->prepare();
});