Pedidos
Flight encapsula o pedido HTTP em um único objeto, que pode ser acessado da seguinte forma:
$request = Flight::request();
Casos de Uso Típicos
Quando você está trabalhando com um pedido em uma aplicação web, geralmente você deseja extrair um cabeçalho, ou um parâmetro $_GET
ou $_POST
, ou talvez até o corpo bruto do pedido. Flight fornece uma interface simples para fazer todas essas coisas.
Aqui está um exemplo para obter um parâmetro da string de consulta:
Flight::route('/search', function(){
$keyword = Flight::request()->query['keyword'];
echo "You are searching for: $keyword";
// consultar um banco de dados ou algo mais com o $keyword
});
Aqui está um exemplo de talvez um formulário com método POST:
Flight::route('POST /submit', function(){
$name = Flight::request()->data['name'];
$email = Flight::request()->data['email'];
echo "You submitted: $name, $email";
// salvar em um banco de dados ou algo mais com o $name e $email
});
Propriedades do Objeto de Pedido
O objeto de pedido fornece as seguintes propriedades:
- body - O corpo bruto do pedido HTTP
- url - A URL sendo solicitada
- base - O subdiretório pai da URL
- method - O método do pedido (GET, POST, PUT, DELETE)
- referrer - A URL de referência
- ip - O endereço IP do cliente
- ajax - Se o pedido é um pedido AJAX
- scheme - O protocolo do servidor (http, https)
- user_agent - Informações do navegador
- type - O tipo de conteúdo
- length - O comprimento do conteúdo
- query - Parâmetros da string de consulta
- data - Dados de POST ou dados JSON
- cookies - Dados de cookies
- files - Arquivos enviados
- secure - Se a conexão é segura
- accept - Parâmetros HTTP accept
- proxy_ip - Endereço IP do proxy do cliente. Examina o array
$_SERVER
paraHTTP_CLIENT_IP
,HTTP_X_FORWARDED_FOR
,HTTP_X_FORWARDED
,HTTP_X_CLUSTER_CLIENT_IP
,HTTP_FORWARDED_FOR
,HTTP_FORWARDED
nessa ordem. - host - O nome do host do pedido
- servername - O SERVER_NAME do
$_SERVER
Você pode acessar as propriedades query
, data
, cookies
e files
como arrays ou objetos.
Então, para obter um parâmetro da string de consulta, você pode fazer:
$id = Flight::request()->query['id'];
Ou você pode fazer:
$id = Flight::request()->query->id;
Corpo Bruto do Pedido
Para obter o corpo bruto do pedido HTTP, por exemplo ao lidar com pedidos PUT, você pode fazer:
$body = Flight::request()->getBody();
Entrada JSON
Se você enviar um pedido com o tipo application/json
e os dados {"id": 123}
, ele estará disponível na propriedade data
:
$id = Flight::request()->data->id;
$_GET
Você pode acessar o array $_GET
via a propriedade query
:
$id = Flight::request()->query['id'];
$_POST
Você pode acessar o array $_POST
via a propriedade data
:
$id = Flight::request()->data['id'];
$_COOKIE
Você pode acessar o array $_COOKIE
via a propriedade cookies
:
$myCookieValue = Flight::request()->cookies['myCookieName'];
$_SERVER
Há um atalho disponível para acessar o array $_SERVER
via o método getVar()
:
$host = Flight::request()->getVar('HTTP_HOST');
Acessando Arquivos Enviados via $_FILES
Você pode acessar arquivos enviados via a propriedade files
:
$uploadedFile = Flight::request()->files['myFile'];
Processamento de Envios de Arquivos (v3.12.0)
Você pode processar envios de arquivos usando o framework com alguns métodos auxiliares. Basicamente, isso se resume a puxar os dados do arquivo do pedido e movê-lo para um novo local.
Flight::route('POST /upload', function(){
// Se você tivesse um campo de entrada como <input type="file" name="myFile">
$uploadedFileData = Flight::request()->getUploadedFiles();
$uploadedFile = $uploadedFileData['myFile'];
$uploadedFile->moveTo('/path/to/uploads/' . $uploadedFile->getClientFilename());
});
Se você tiver vários arquivos enviados, você pode iterar por eles:
Flight::route('POST /upload', function(){
// Se você tivesse um campo de entrada como <input type="file" name="myFiles[]">
$uploadedFiles = Flight::request()->getUploadedFiles()['myFiles'];
foreach ($uploadedFiles as $uploadedFile) {
$uploadedFile->moveTo('/path/to/uploads/' . $uploadedFile->getClientFilename());
}
});
Nota de Segurança: Sempre valide e sanitize a entrada do usuário, especialmente ao lidar com envios de arquivos. Sempre valide o tipo de extensões que você permitirá ser enviadas, mas você também deve validar os "bytes mágicos" do arquivo para garantir que ele seja realmente o tipo de arquivo que o usuário alega que é. Há articles and libraries disponíveis para ajudar com isso.
Cabeçalhos do Pedido
Você pode acessar cabeçalhos do pedido usando o método getHeader()
ou getHeaders()
:
// Talvez você precise do cabeçalho Authorization
$host = Flight::request()->getHeader('Authorization');
// ou
$host = Flight::request()->header('Authorization');
// Se você precisar pegar todos os cabeçalhos
$headers = Flight::request()->getHeaders();
// ou
$headers = Flight::request()->headers();
Corpo do Pedido
Você pode acessar o corpo bruto do pedido usando o método getBody()
:
$body = Flight::request()->getBody();
Método do Pedido
Você pode acessar o método do pedido usando a propriedade method
ou o método getMethod()
:
$method = Flight::request()->method; // na verdade, chama getMethod()
$method = Flight::request()->getMethod();
Nota: O método getMethod()
primeiro puxa o método de $_SERVER['REQUEST_METHOD']
, então ele pode ser sobrescrito por $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']
se existir ou $_REQUEST['_method']
se existir.
URLs do Pedido
Há alguns métodos auxiliares para juntar partes de uma URL para sua conveniência.
URL Completa
Você pode acessar a URL completa do pedido usando o método getFullUrl()
:
$url = Flight::request()->getFullUrl();
// https://example.com/some/path?foo=bar
URL Base
Você pode acessar a URL base usando o método getBaseUrl()
:
$url = Flight::request()->getBaseUrl();
// Observe, sem barra no final.
// https://example.com
Análise de Consulta
Você pode passar uma URL para o método parseQuery()
para analisar a string de consulta em um array associativo:
$query = Flight::request()->parseQuery('https://example.com/some/path?foo=bar');
// ['foo' => 'bar']