Principais métodos para obtenção de parâmetros da Request no Laravel

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.

Como 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.

Propriedade 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 é precisarmos 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.

Deixe seu comentário

Desenvolvedor, autor e instrutor. Apaixonado por desenvolvimento de software e tudo ligado a área de tecnologia. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel de 1 ano.

JUNTE-SE A MAIS DE 150.000 PROGRAMADORES