As rotas do Luna pode ser definida pelo URI no diretório /routes
de forma bastante simples:
Copy use \ App \ Controllers \ Pages ;
$router -> get ( '/' , [
function ($request , $response) {
return Pages \ Example :: getPage ( $request , $response ) ;
}
] ) ;
Métodos de roteador disponÃveis:
Copy $router -> get ( $uri , [$callback] ) ;
$router -> post ( $uri , [$callback] ) ;
$router -> put ( $uri , [$callback] ) ;
$router -> patch ( $uri , [$callback] ) ;
$router -> delete ( $uri , [$callback] ) ;
$router -> options ( $uri , [$callback] ) ;
Também é possÃvel definir múltiplos métodos para um mesmo URI e callback:
Copy $router -> match ( [ 'get' , 'post' ] , $uri , [$callback] ) ;
$router -> any ( $uri , [$callback] ) ;
Parâmetros de rota
As rotas podem receber parâmetros personalizados para definição de url amigáveis:
Copy $router -> get ( '/products/{id}' , [
function ($request , $response) {
return Pages \ Product :: getPage ( $request , $response ) ;
}
] ) ;
Os parâmetros opcionais podem ser obtidos através da $request
:
Copy # /products/1
class Product extends Page {
public static function getPage ($request , $response) {
$pathParams = $req -> getPathParams () ;
var_dump ( $pathParams ) ;
// ['id' => '1'];
}
}
É recomendado que utilize o método acima para obter os parâmetros enviados pela rota, porém ainda é possÃvel obtê-los com uma variável explicita:
Copy $router -> get ( '/products/{id}' , [
function ($id , $request , $response) {
return Pages \ Product :: getPage ( $id , $request , $response ) ;
}
] ) ;
# /products/1
class Product extends Page {
public static function getPage ($id , $request , $response) {
var_dump ( $id ) ;
// 1
}
}
Parâmetros opcionais
Pode ser necessário especificar um parâmetro de rota que nem sempre esteja presente na requisição. Para fazer isso basta adicionar um ?
após o nome do parâmetro.
Copy $router -> get ( '/cart/{id?}' , [
function ($request , $response) {
// ...
}
] ) ;
$router -> get ( '/product/{id}/{slug?}' , [
function ($request , $response) {
// ...
}
] ) ;
Parâmetros opcionais não informados na requisição serão definidos como NULL
.
Rotas de erros
Alguns erros comuns podem ser tratados diretamente na definição da rota para personalizar a página de retorno:
Copy use \ App \ Controllers \ Errors ;
$router -> error ( 404 , [
function ($request , $response) {
return Errors \ PageNotFound :: getPage ( $request , $response ) ;
}
] ) ;
Também é possÃvel definir uma rota padrão para que seja apresentada em caso de erro:
Copy use \ App \ Controllers \ Errors ;
$router -> error ( 'default' , [
function ($request , $response) {
return Errors \ General :: getPage ( $request , $response ) ;
}
] ) ;
Rotas sem controllers
Embora não recomendável ainda é possÃvel criar rotas que retornam diretamente sem um controller especificado:
Copy use \ App \ Http \ Response ;
$router -> get ( '/products' , [
function () {
return ( new Response ()) -> send ( 200 , "Produtos" ) ;
}
] ) ;
Redirecionamento
Para realizar um redirecionamento execute a função redirect()
presente no objeto da rota:
Copy $request -> getRouter () -> redirect ( '/destination' ) ;