🚀 Capítulo 18: Protegendo a Batcaverna (Tema: Batman)

NOTE

Este capítulo utiliza a temática de Batman para explicar a Validação de Dados no Laravel. Proteja o seu sistema contra dados inválidos ou maliciosos!


1. 🎯 Objetivo da Aula

Compreender a importância de validar os dados que chegam das requisições e aprender a usar o sistema de validação do Laravel para garantir que os dados sejam seguros e estejam no formato correto.

2. 🏢 O Cenário Prático (Seu Desafio)

Para entrar na Batcaverna, não basta apenas saber onde fica a passagem secreta. O computador central do Batman faz uma série de verificações de segurança: a retina precisa ser do Bruce Wayne, a voz precisa ser reconhecida e o peso do carro precisa bater com o do Batmóvel. Se alguém tentar entrar digitando uma senha errada ou sem identificação, o sistema bloqueia o acesso na hora!

Na sua API ou site:

  • Você não pode confiar no que o usuário digita. Se ele deixar o campo “e-mail” em branco, ou digitar um texto onde deveria ser a idade, o seu banco de dados pode dar erro!
  • O desafio é usar o sistema de Validação do Laravel para criar as regras de segurança do seu sistema!

🧠 Fundamentos: A Teoria Traduzida

🛡️ 1. O Método validate():

No Laravel, o objeto $request (que traz os dados que o usuário digitou) possui um método chamado validate(). Você passa um array dizendo o nome do campo e as regras dele separadas por uma barra vertical |.

class FormController {
    public function salvar(Request $request) {
        $request->validate([
            'nome' => 'required|string|max:255',
            'email' => 'required|email|unique:usuarios',
            'idade' => 'required|integer|min:18',
        ]);
        
        // Se passar daqui, os dados são válidos!
    }
}

📋 2. Entendendo as Regras:

  • required: O campo é obrigatório (não pode ficar vazio).
  • string: Precisa ser um texto.
  • email: Precisa ser um formato de e-mail válido (contendo @).
  • unique:usuarios: O Laravel busca no banco e não deixa cadastrar se aquele e-mail já existir na tabela usuarios!
  • integer: Precisa ser um número inteiro.
  • min:18: O número precisa ser no mínimo .

4. 📖 Exemplo Guiado: Cadastrando um Vilão

Veja como ficaria a validação no Controller para cadastrar um novo vilão preso em Gotham:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
 
class VilaoController extends Controller {
    public function prender(Request $request) {
        // Aplicando as regras do Batman!
        $request->validate([
            'nome' => 'required|min:3',
            'periculosidade' => 'required|integer|max:10'
        ]);
 
        // Se os dados forem inválidos, o Laravel joga o usuário
        // de volta para a página anterior com as mensagens de erro!
        
        return "Vilão cadastrado com sucesso no Arkham!";
    }
}
?>

5. 🛠️ Prática Obrigatória 1: Criando as Regras

  1. Escreva a linha de código de validação para um campo chamado telefone que seja obrigatório e precise ser do tipo numérico (numeric).

6. 🛠️ Prática Obrigatória 2: O Guardião

  1. O que acontece no Laravel se o usuário enviar o formulário deixando um campo que tinha a regra required em branco?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 18 PHP_Batman) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_php_e_laravel/
├── capitulos/
│   └── capitulo_18_batman.md

💡 Checkpoint de Lógica

Se a validação falhar em uma requisição do tipo API (que espera JSON), o Laravel não redireciona o usuário. Ele devolve automaticamente uma resposta com código de erro e a lista de erros em formato JSON!

10. 🔥 Desafio de Fixação

Pesquise como personalizar as mensagens de erro da validação (ex: em vez de aparecer em inglês, aparecer “O campo nome é obrigatório”).

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

$regras = [
    'telefone' => 'required|numeric'
];

Gabarito da Prática 2:

  1. O Laravel vai parar a execução do código do Controller e redirecionar o usuário de volta para a tela do formulário, enviando junto as mensagens de erro para serem exibidas na tela.

Capitulo Anterior | Proximo Capitulo