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

Guilherme Nascimento
3 min readApr 17, 2020

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 HTTP
public 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();
});

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Guilherme Nascimento
Guilherme Nascimento

Written by Guilherme Nascimento

php, javascript, mysql, python, html5, css3, html, css, jquery / https://inphinit.github.io

No responses yet

Write a response