Requisições e Respostas
O PivotPHP usa objetos de mensagem HTTP compatíveis com PSR-7: Request e Response
(PivotPHP\Core\Http\Request e PivotPHP\Core\Http\Response).
O Objeto Request
Dados de entrada
$app->post('/usuarios', function($request, $response) {
// Parâmetro de rota
$id = $request->param('id');
// Entrada (query ou corpo), com padrão opcional
$nome = $request->input('nome', 'Anônimo');
$email = $request->get('email');
// Query string
$pagina = $request->getQuery('pagina', 1);
$todos = $request->getQueryParams();
// Corpo JSON parseado (stdClass)
$dados = $request->body();
$nome = $dados->nome ?? null;
});
Cabeçalhos
$contentType = $request->header('Content-Type');
$accept = $request->getHeaderLine('Accept');
$todos = $request->getHeaders();
if ($request->hasHeader('X-Requested-With')) {
// requisição AJAX
}
Informações da requisição
$metodo = $request->getMethod();
$caminho = $request->getPath();
$ip = $request->ip();
$userAgent = $request->userAgent();
$urlCompleta = $request->fullUrl();
if ($request->isAjax()) { /* ... */ }
if ($request->isSecure()) { /* HTTPS */ }
Upload de arquivos
$app->post('/upload', function($request, $response) {
if ($request->hasFile('avatar')) {
$arquivo = $request->file('avatar'); // array do PSR-7 UploadedFile
}
});
Atributos (PSR-7)
$request = $request->withAttribute('usuario', $usuario);
$usuario = $request->getAttribute('usuario');
$todos = $request->getAttributes();
O Objeto Response
Respostas básicas
return $response->text('Olá Mundo');
return $response->html('<h1>Olá Mundo</h1>');
return $response->json(['mensagem' => 'Sucesso']);
return $response->send('texto cru');
Códigos de status
return $response->status(201)->json($dados);
$status = $response->getStatusCode();
$razao = $response->getReasonPhrase();
Não há atalhos por código (ok(), created(), notFound() etc.) — use status($code).
Cabeçalhos
$response = $response->header('X-Custom', 'valor');
$response = $response->withHeader('Content-Type', 'application/json');
$response = $response->withAddedHeader('X-Custom', 'outro');
Cookies
$response = $response->cookie('sessao', $valor, time() + 3600);
$response = $response->clearCookie('sessao');
Redirecionamentos
return $response->redirect('/dashboard');
return $response->redirect('/login', 301);
Não há back() nem dados flash.
Erro e sucesso
return $response->error(404); // {"error": "Not Found", "code": 404}
return $response->error(422, 'Inválido'); // mensagem customizada
return $response->success($dados); // resposta de sucesso padronizada
Download / stream
return $response->streamFile('/caminho/arquivo.pdf', [
'Content-Type' => 'application/pdf',
]);
Trabalhando com JSON
$app->post('/api/usuarios', function($request, $response) {
$dados = $request->body(); // stdClass
return $response->json(['status' => 'sucesso']);
});
Não há jsonp(), xml() nem csv().
Melhores Práticas
- Sempre retorne a resposta de todo handler.
- Use
status()para definir códigos HTTP. - Type hint
Request/Responsepara suporte da IDE:
use PivotPHP\Core\Http\Request;
use PivotPHP\Core\Http\Response;
$app->post('/usuarios', function (Request $request, Response $response) {
return $response->json(['criado' => true]);
});