Redirecionamento HTTP

Guilherme Nascimento
2 min readApr 17, 2020

Para usar primeiro adicione Inphinit\Experimental\Http\Redirect no seu arquivo, algo como isto:

<?php
use Inphinit\Experimental\Redirect;

Redirecionando para um caminho na aplicação

Se a sua aplicação estiver no “root” do servidor, quando acessar http://localhost/ irá ser redirecionado para http://localhost:9000/baz:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/', function () {
Redirect::to('baz'); //irá redirecionar para http://localhost/baz
return 'Olá, mundo'; //será processado
});

Se a sua rota for /user/ e acessar http://localhost/user/

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/user/', function () {
Redirect::to('baz'); //irá redirecionar para http://localhost/user/baz
return 'Olá, mundo'; //será processado
});

Se a sua rota for /user/ and add prefix / irá ser redirecionado para http://localhost/baz:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/user/', function () {
Redirect::to('/baz'); //irá redirecionar para http://localhost/baz
return 'Olá, mundo'; //será processado
});

Se sua aplicação não estiver na “root” do servidor, por exemplo http://localhost/mysite/, irá ser redirecionado para http://localhost/mysite/baz:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/', function () {
Redirect::to('baz'); //irá redirecionar para http://localhost/mysite/baz
return 'Olá, mundo'; //será processado
});

Se a sua rota for /user/ e acessar http://localhost/mysite/user/ irá ser redirecionado para http://localhost/mysite/user/baz:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/user/', function () {
Redirect::to('baz'); //irá redirecionar para http://localhost/mysite/user/baz
return 'Olá, mundo'; //será processado
});

Se acessar http://localhost/mysite/user irá ser redirecionado para http://localhost/mysite/foo:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/user/', function () {
Redirect::to('/foo'); //irá redirecionar parahttp://localhost/mysite/foo
return 'Olá, mundo'; //será processado
});

Note que isto não irá redirecionar para fora do caminho da aplicação

Apenas redirecionar

Para parar a aplicação quando redirecionar use o método Inphinit\Experimental\Redirect::only:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Http\Redirect;
Route::set('GET', '/', function () {
Redirect::only('baz'); //irá redirecionar parahttp://localhost/baz
custom_function(); //NÃO será processado return 'Olá, mundo'; //NÃO será processado
});

Redireciona para um Controller

Se um controller for definido para uma rota você pode redirecionar usar o método Inphinit\Experimental\Routing\Redirector::action, se acessar http://localhost/redirecionamento irá ser redirecionado para http://localhost/foo/bar/baz:

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Routing\Redirector;
Route::set('GET', '/foo/bar/baz', 'MeuControllador:acao');Route::set('GET', '/redirecionamento', function () {
Redirector::action('MeuControllador:acao'); //irá redirecionar para http://localhost/foo/bar/baz
});

Redireciona para uma rota com regex passando argumentos:

Route::set('GET, '/user/{:[\w\-]+:}/{:\d+:}', 'MeuControllador:acao');//se acessar http://localhost/redirecionamento-1
Route::set('GET', '/redirecionamento-1', function () {
//irá redirecionar para http://localhost/user/maria/1001
Redirector::action('MeuControllador:acao', array( 'maria', '1001' ));
});
//se acessar http://localhost/redirecionamento-2
Route::set('GET', '/redirecionamento-2', function () {
//irá redirecionar para http://localhost/user/joao/1002
Redirector::action('MeuControllador:acao', array( 'joao', '1002' ));
});

Redireciona para uma rota

<?php
use Inphinit\Routing\Route;
use Inphinit\Experimental\Routing\Redirector;
Route::set('GET', '/foo', 'MeuControllador:acao');
Route::set('GET', '/bar', 'MeuControllador:acao');
Route::set('GET', '/redirecionamento-1', function () {
Redirector::route('/foo'); //irá redirecionar para http://localhost/foo/bar/baz
});
Route::set('GET', '/redirecionamento-2', function () {
Redirector::route('/bar'); //irá redirecionar para http://localhost/foo/bar/baz
});
Route::set('GET', '/redirecionamento-3', function () {
Redirector::route('/baz'); //Irá emitir uma Exception pois a rota não foi definida
});

--

--