Quando desenvolvemos aplicações na qual dados vem de formulários, precisamos seguir algumas regras, como inserção do @CRSF e manter uma estrutura de nomes, por exemplo. No geral o processo para obter os inputs no Laravel é rápido, seguro e como sempre, muito fácil.
Basicamente precisamos definir os atributos name, incluir a marcação de @crsf e por fim, chamar o método input da classe Request. Vale lembrar que também é necessário definir as rotas com os verbos corretamente.
Antes de mais nada, vamos registrar as nossas rotas no arquivo routes\web.php, conforme mostra o exemplo abaixo.
Route::prefix('form')->group(function () {
Route::get('/', [FormController::class, 'index']);
Route::post('/', [FormController::class, 'store'])->name('form.store');
});
Nosso acesso fica da seguinte forma: http://127.0.0.1:8000/form.
Okay, com as rotas prontas a gente vai começar criar agora o nosso formulário, veja todo o código abaixo.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Requisição - Laravel</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
<body>
<div style="max-width:500px;width:100%;margin:0 auto;margin-top:5%">
<form action="{{ route('form.store') }}" method="post">
@csrf
<div>
<label for="nome" class="form-label">Nome:</label>
<input type="text" id="nome" name="nome" placeholder="Informe seu nome completo" class="form-control">
</div>
<div class="mt-3">
<label for="email" class="form-label">E-mail:</label>
<input type="email" id="email" name="email" placeholder="email@dominio.com" class="form-control">
</div>
<div class="mt-3">
<input type="submit" class="btn btn-primary" value="Enviar">
</div>
</form>
</div>
</body>
</html>
Dentro da tag form, nós apontamos o action para a rota form.store, você pode observar que nas nossas rotas a gente definiu o ->name() com esse valor. Assim que a gente enviar o formulário, o próprio Laravel se encarrega de chamar a página certa.
<form action="{{ route('form.store') }}" method="post">
Na sequencia, nós precisamos informar o atributo @csrf, que é um método padrão de proteção dos formulário.
...
@csrf
<div>
Agora devemos tomar cuidado ao declarar nossos inputs, é importante que o atributo name esteja presente. O valor do atributo será utilizado par fazer a captura do campo digitado, então mantenha uma padronização nesses nomes.
<input type="text" id="nome" name="nome"...
Até aqui a gente tem toda nossa aplicação preparada para enviar os dados, agora nos resta de fato captura-los. Para isso, vamos utilizar o método input da classe Request, classe essa que deve estar assinada no método, como mostra o código abaixo.
public function store(Request $request)
{
$nome = $request->input('nome');
$email = $request->input('email');
return response()->json([
'nome' => $nome,
'email' => $email
]);
}
Criamos um método chamado store que recebe por injeção de dependência todas as informações da requisição. Obtemos as informações através da variável $request, que por sua vez nos fornece o acesso ao método input, que recebe como parâmetro o nome do campo que definimos no nosso formulário.
Como definimos:
<input type="text" id="nome" name="nome"...
Como capturamos:
$request->input('nome');
A título de testes, exibimos o resultado em uma resposta Json.
Apenas para reforçar, no início do nosso arquivo devemos utilizar o namespace do Resquest, caso o seu arquivo não tenha, basta incluí-lo.
use Illuminate\Http\Request;
E assim finalizamos mais um artigo prático.