Controllers

Toda requisição recebida na rota deve (ou deveria) passar por um controller para que enfim retorne ao usuário os dados solicitados ou a view necessária, sendo assim os controllers devem ser criados para tratar a requisição corretamente.

É possível cria-los no diretório /app/Controllers com subpastas para um melhor controle:

namespace App\Controllers\Product;

class Product {
    public static function getProduct($request, $response) {
        // ...
    }
}

Obtendo dados da requisição

Os dados da requisição, como headers, parâmetros query, variáveis post, parâmetros de url, uri e método http podem ser obtidos com a variável $request:

$request->header(); // Obter parâmetros do header
$request->query(); // Obter parâmetros da query
$request->body(); // Obter parâmetros do corpo
$request->param(); // Obter parâmetros da URL

$request->getUri(); // Obter URI
$request->getHttpMethod(); // Obter método HTTP

É possível obter parâmetros específicos com as funções: $request->query('id'). Não especificar um parâmetro fará com que todos sejam retornados em array.

Respondendo a requisição

Toda requisição espera uma resposta, sendo ela problemática ou não, por isso é necessário que todo controller possua um return $res->send() com informações da resposta:

namespace App\Controllers\Product;

class Product {
    public static function getProduct($request, $response) {
        $return->send(200, "Sucesso");
    }
}

Os status (200 no exemplo) da resposta deve seguir os padrões de status http listados aqui.

Padrão de retorno

O padrão de retorno pode ser definido na configuração no arquivo .env e é pré-definida para o formato text/html mas pode ser modificado dependendo de como for necessário:

public static function getProduct($request, $response) {
    // ...
    $return->send(200, ["data" => "Sucesso"], "application/json");
}

É possível também utilizar alias para o retorno da requisição em HTML ou JSON:

$res->send(200, $content, 'json'); // Ao invés de 'application/json'
$res->send(200, $content, 'html'); // Ao invés de 'text/html'

Last updated