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) {
// ...
}
]);
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');