Recebendo requisições de formulário com o Laravel

Para obtermos os campos do formulário precisamos respeitar algumas convenções e usar um método da classe Request.

Publicado em

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

Formulário HTML no blade do Laravel.
Formulário HTML no blade do Laravel.

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.

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção

Todos os nossos cursos em promoção

Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção