Nesse artigo vamos ver como obter os dados enviados pelo usuário no Laravel. Na verdade, quando falamos em pegar dados enviados pelo usuário, seja via formulário ou diretamente na URL, estamos falando da Request. Caso não saiba o que é Request temos esse artigo que fala sobre alguns conceitos HTTP.
O Laravel possui uma classe específica para trabalhar com os dados enviados na requisição. Essa classe tem o nome de Request
e fica no namespace \Illuminate\Http
. Ela possui uma série de métodos que facilitam obtenção das informações enviadas pelo cliente.
Curso Nginx - Criação de sites
Conhecer o cursoComo podemos utilizar a classe Request
Geralmente o local onde mais usamos os dados enviados na requisição é o Controller. No Laravel, podemos injetar instâncias diretamente nos métodos do controller, isso nos permite usar facilmente a instância da classe Request.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function store(Request $request)
{
//Usamos a instância para chamar os métodos da requisição
$request->...();
}
}
Obtendo dados enviados via URL
O modo mais simples de enviar informações do usuário para o servidor através da requisição é a URL. Usando um padrão específico podemos passar dados no formato chave valor, veja a URL abaixo:
http://servidor.test/meurecurso?escola=Treinaweb&curso=Laravel
Através dela estamos passando os parâmetros escola e curso que possuem respectivamente os valores TreinaWeb e Laravel.
Para obter todos os dados passados na URL usamos o método query
sem passar nenhum parâmetro $request->query()
. O Laravel pega todos os parâmetros e retorna em forma de array:
array:2 [
"escola" => "Treinaweb"
"curso" => "Laravel"
]
O método query pode ser usado para obter apenas um valor, basta passar o nome da chave no primeiro argumento. Caso a chave não esteja declarada na URL ainda é possível definir um valor padrão no segundo argumento.
$request->query("escola");
$request->query("escola", "Valor padrao");
Montando o formulário de exemplo
Os dados enviados via POST estão localizados no corpo da requisição. O Laravel possui alguns métodos que nos permitem obter essas informações para serem usadas na nossa aplicação.
Para conseguirmos enviar informações via POST precisamos criar um formulário que será submetido para uma rota qualquer da nossa aplicação. Vamos usar como base o seguinte formulário:
<form action="http://servidor.test/meurecurso" method="POST">
{{ csrf_field() }}
Nome <input type="text" name="name" value="Elton"> <br>
Idade <input type="text" name="age" value="27"> <br>
Email<input type="text" name="email" value="elton.fonseca@treinaweb.com.br"> <br>
<input type="submit" value="Enviar">
</form>
OBS: o helper csrf_field
retorna um input do tipo hidden com o token que confirma que o formulário está sendo realmente enviado pela nossa aplicação.
Obtendo dados enviados via POST
O primeiro método que vamos falar é o all()
ele retorna todos os dados em formato de array:
array:3 [
"name" => "Elton"
"age" => "27"
"email" => "elton.fonseca@treinaweb.com.br"
]
Outro método que podemos usar é o input
. Ele retorna um único valor e podemos definir um valor padrão como segundo argumento, caso a chave não seja encontrada:
$request->input('name');
$request->input('name', 'Nome padrão');
Temos também os métodos only
que busca apenas os parâmetros especificados nele e o método except
que trás todos parâmetros, exceto os especificados nele. Podemos passar uma lista de argumentos ou um array:
$request->only('name', 'email');
$request->only(['name', 'email']);
$request->except('age');
$request->except(['age']);
Todas as chamadas acima retornam a mesma informação:
array:2 [
"name" => "Elton"
"email" => "elton.fonseca@treinaweb.com.br"
]
Uma observação importante! Todos os métodos que vimos nesse tópico all()
, input()
, only()
e except()
pegam valores passados via POST e também via GET na URL, dando preferência para os parâmetros POST quando eles possuem o mesmo nome. Enquanto o query
, que vimos no tópico anterior, pega apenas os parâmetros passados via GET.
Curso Laravel - Desenvolvimento de APIs REST
Conhecer o cursoPropriedade dinâmica
O Laravel cria propriedades dinamicamente para os parâmetros enviados na requisição, essas propriedades facilitam o acesso aos dados e torna o código mais limpo.
$request->name; //Treinaweb
$request->age; //27
$request->email; //elton.fonseca@treinaweb.com.br
É possível obter dinamicamente os parâmetros enviados via GET e POST.
Helper request
Existem algumas situações onde precisamos usar os dados da requisição em locais onde não temos fácil acesso a instância da requisição, nesses casos podemos usar o helper request
. Quando chamamos o helper sem passar nenhum argumento ele retorna uma instância da classe request, a partir dela podemos chamar qualquer método da Request:
request()->all();
request()->input("name");
request()->only("email");
//...
Ainda é possível pegar os dados do parâmetro passando o nome do argumento e o valor padrão, para caso o parâmetro não seja encontrado:
request("name", "Nome padrão");
Verificando o parâmetro
Outra situação comum é precisamos verificar se um parâmetro foi passado na requisição. Para isso usamos o método has()
. Ele retorna verdadeiro independente do valor passado, mesmo que o valor seja vazio:
if ($request->has('name')) {
//
}
Caso precise verificar se o parâmetro foi passado na requisição e não é vazio, podemos usar o método filled()
:
if ($request->filled('name')) {
//
}
Obter arquivo e realizar upload
O Laravel possui um método especial chamado file
para obter os arquivos. Também é possível usar as propriedades dinâmicas:
$request->file('image');
$request->image;
Esse método retorna uma instância da classe Illuminate\Http\UploadedFile
, ela já possui todos os recursos necessários para salvar o arquivo de maneira simples. Podemos simplesmente chamar o método store
para salvar o arquivo:
$request->file('image')->store('local');
Conclusão
Nesse post nós vimos os principais métodos para obtenção de parâmetros enviados pelo usuário através da requisição. Além desses dados a requisição ainda possui diversas outras informações que são enviadas pelo cliente da nossa aplicação. A documentação do Laravel possui vários exemplos práticos de como obter esses dados.