Table of Contents
Desenvolvimento de APIs e Microsserviços 💻
Domine a criação de arquiteturas modernas de backend com Microsserviços, modelagem RESTful, segurança com JWT e o desenvolvimento de interfaces SPA modernas.
Foco do Curso
Metodologia: Aprendizado prático focado na construção de ecossistemas Fullstack, integrando serviços backend robustos com frontends de alta performance.
🎯 O Que Você Vai Aprender
-
Microsserviços --- Aprenda a decompor monólitos, gerenciar comunicação entre serviços e utilizar API Gateways para escalabilidade. Ir para Módulo 1
-
Modelagem RESTful --- Domine endpoints, status codes, documentação com Swagger/OpenAPI e padrões de projeto para APIs profissionais. Ver Modelagem
-
Autenticação JWT --- Implemente segurança de ponta a ponta com JSON Web Tokens, proteção de rotas e controle de acesso RBAC. Ver Segurança
-
Frontends SPA --- Integre seu backend com Single Page Applications modernas, explorando componentes, estados e roteamento dinâmico. Ver Projetos
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado em quatro trilhas de especialização.
🧱 Módulo 1: Serviços e Microsserviços (Aulas 01-04)
- Aula 01 - Intro Microsserviços 🧩
- Aula 02 - Arquitetura e Gateway 🏗️
- Aula 03 - Modelagem REST 📡
- Aula 04 - Documentação (Swagger) 📄
🏗️ Módulo 2: CRUD e Persistência (Aulas 05-08)
- Aula 05 - Implementação de APIs ⚙️
- Aula 06 - Persistência e Banco 💾
- Aula 07 - Testes Unitários 🧪
- Aula 08 - Testes Integrados 🚢
🔌 Módulo 3: Autenticação e Segurança (Aulas 09-11)
🚀 Módulo 4: Aplicações Web SPA (Aulas 12-16)
- Aula 12 - Conceito de SPA 🌐
- Aula 13 - Componentes e Templates 🧱
- Aula 14 - Estados e Eventos 🔄
- Aula 15 - Roteamento 🛣️
- Aula 16 - Integração e Projeto Final 🎓
Plano de Ensino 📅
Curso: Desenvolvimento Web com PHP e Laravel
Ementa
- PHP Moderno: Evolução, Sintaxe 8.x, Composer e Padrões PSR.
- Laravel Core: MVC, Blade, Migrations e Eloquent ORM.
- Segurança e Autenticação: Proteção OWASP, JWT/Sanctum e Controle de Acesso (RBAC).
- Ecossistema e Deploy: Testes (Pest/PHPUnit), Jobs, Docker e CI/CD.
Cronograma (16 Aulas)
Módulo 1: Fundamentos e PHP Moderno
- Aula 01: Introdução ao PHP Moderno e Ecossistema
- Aula 02: Fundamentos de PHP e POO
- Aula 03: Introdução ao Framework Laravel
- Aula 04: Sistema de Rotas e Controllers
Módulo 2: Core do Laravel e Banco de Dados
- Aula 05: Views com Blade Template Engine
- Aula 06: Banco de Dados, Migrations e Seeders
- Aula 07: Eloquent ORM e Relacionamentos
- Aula 08: Implementação de CRUD Completo
Módulo 3: Recursos Avançados e Segurança
- Aula 09: Autenticação e Autorização (Breeze/Jetstream)
- Aula 10: APIs REST e API Resources
- Aula 11: Segurança e Melhores Práticas OWASP
- Aula 12: Testes Automatizados com PHPUnit/Pest
Módulo 4: Ecossistema e Produção
- Aula 13: Upload de Arquivos e Storage
- Aula 14: Filas, Eventos e Jobs (Processamento Assíncrono)
- Aula 15: Docker e Estratégias de Deploy
- Aula 16: Projeto Final e Boas Práticas Profissionais
Avaliação
- Exercícios: 16 listas de exercícios com progressão didática.
- Projetos: 16 mini-projetos aplicados.
- Quizzes: 16 testes de conhecimento.
- Projeto Integrador: Sistema completo desenvolvido ao longo do curso.
Aulas
Aula 01 - Introdução ao PHP Moderno 🐘
🎯 Objetivo da Aula
Nesta aula, vamos entender a evolução do PHP, por que ele continua sendo um gigante da web moderna e como preparar o ambiente para o desenvolvimento profissional utilizando o Composer e padrões PSR.
🚀 A Evolução do PHP
O PHP não é mais aquela linguagem "bagunçada" dos anos 2000. Desde a versão 7 e, especialmente na versão 8.x, o PHP se tornou uma linguagem robusta, performática e com tipagem forte.
O que mudou?
- Performance: O PHP 8 é significativamente mais rápido que as versões anteriores.
- Modernidade: Introdução de Attributes, Union Types, Match Expression e JIT (Just-In-Time) compiler.
- Ecossistema: O Composer revolucionou a forma como gerenciamos pacotes.
📊 Ecossistema PHP Moderno
Veja abaixo como as peças se encaixam no desenvolvimento moderno:
graph TD
A[Desenvolvedor] --> B[PHP 8.x]
B --> C[Composer]
C --> D[Packagist]
D --> E[Laravel / Symfony / Slim]
E --> F[Aplicação Web Moderna]
📦 Composer: O Gerenciador de Dependências
O Composer é indispensável. Ele gerencia bibliotecas externas e garante que o seu projeto seja portável.
Comandos Comuns
Use o terminal para gerenciar seu projeto:
📜 Padrões de Código: PSR
As PSRs (PHP Standard Recommendations) são recomendações criadas pelo PHP-FIG para garantir que códigos de diferentes desenvolvedores e frameworks funcionem bem juntos.
Principais PSRs
- PSR-1: Padrões básicos de codificação.
- PSR-12: Guia de estilo de código (estendido).
- PSR-4: Autoloader (mapeamento de namespaces para arquivos).
🧠 Conceitos Chave
Tipagem Forte no PHP 8
Agora podemos (e devemos) definir tipos para garantir a segurança do código:
<?php
function soma(int $a, int $b): int {
return $a + $b;
}
echo soma(10, 20); // 30
// echo soma("10", "vinte"); // Erro de Tipo!
🛠️ Exercício Prático
- Verifique a versão do seu PHP instalado:
php -v. - Crie um arquivo
index.phpe implemente uma função que receba um nome (string) e retorne uma saudação formatada. - Inicialize um projeto com
composer init.
🚀 Mini-Projeto da Aula
Gerenciador de Dependências Simples:
Crie um script que utilize a biblioteca vlucas/phpdotenv (via Composer) para ler variáveis de ambiente de um arquivo .env e exibi-las na tela de forma segura.
Aula 02 - Fundamentos de PHP e POO 🏗️
🎯 Objetivo da Aula
Aprofundar nos fundamentos da linguagem PHP, revisando estruturas de controle, tipos de dados e mergulhando na Programação Orientada a Objetos (POO) moderna aplicada ao ecossistema Laravel.
💎 Estruturas Essenciais
O PHP 8 trouxe melhorias sintáticas que tornam o código mais limpo e seguro.
Match Expression (PHP 8.0+)
O match é uma alternativa poderosa e mais segura ao switch.
🧩 Programação Orientada a Objetos (POO)
O Laravel é construído totalmente sobre POO. Entender classes, objetos, herança e interfaces é fundamental.
Anatomia de uma Classe Moderna
No PHP 8.2+, podemos usar classes readonly e promoção de propriedades no construtor.
<?php
namespace App\Models;
class Usuario {
// Promoção de Propriedade no Construtor
public function __construct(
public string $nome,
public string $email,
private int $idade
) {}
public function apresentar(): string {
return "Olá, eu sou {$this->nome}.";
}
}
📊 Diagrama de Classes (Exemplo)
Veja como organizamos a estrutura de herança em um sistema de ensino:
classDiagram
class Pessoa {
+String nome
+String email
+falar()
}
class Aluno {
+String matricula
+estudar()
}
class Professor {
+String especialidade
+ensinar()
}
Pessoa <|-- Aluno
Pessoa <|-- Professor
📂 Namespaces e Autoloading
Namespaces resolvem o conflito de nomes de classes e, junto com a PSR-4, permitem que o Composer carregue seus arquivos automaticamente.
🧠 Blocos de Destaque
Atenção com Tipagem
Sempre ative o modo estrito no topo dos seus arquivos para evitar coerções inesperadas:
declare(strict_types=1);
🛠️ Exercícios Progressivos
- Básico: Crie uma classe
Carrocom propriedadesmarcaemodelo. - Intermediário: Implemente um método que calcule a idade de um objeto
Pessoabaseado no ano de nascimento. - Desafio: Crie uma
InterfacechamadaNotificacaoe duas classesEmaileSMSque a implementem.
🚀 Mini-Projeto da Aula
Sistema de Cadastro Simples (CLI):
Desenvolva uma pequena aplicação de terminal onde o usuário pode cadastrar "Produtos" em uma lista (array de objetos). Use POO para representar o Produto e uma classe Repositorio para gerenciar a lista.
Aula 03 - Introdução ao Framework Laravel 🚀
🎯 Objetivo da Aula
Conhecer o Laravel, o framework PHP mais popular do mundo. Vamos entender sua filosofia, instalar nosso primeiro projeto e explorar a estrutura de diretórios que o torna tão organizado e escalável.
🌟 O que é o Laravel?
O Laravel é um framework web focado na experiência do desenvolvedor (DX). Ele segue o padrão MVC (Model-View-Controller) e fornece ferramentas prontas para quase tudo: autenticação, banco de dados, filas, e-mails, etc.
Filosofia
O Laravel prioriza a "felicidade do programador" através de uma sintaxe expressiva e elegante.
🏗️ Estrutura de Diretórios
Ao criar um projeto Laravel, você verá muitas pastas. As principais são:
| Pasta | Descrição |
|---|---|
app/ |
Onde mora a lógica da sua aplicação (Controllers, Models). |
config/ |
Arquivos de configuração global. |
database/ |
Migrations, Seeders e Factories. |
public/ |
Ponto de entrada (index.php) e arquivos estáticos. |
resources/ |
Views (Blade), Sass e JavaScript. |
routes/ |
Onde todas as rotas da aplicação são definidas. |
📊 Fluxo de Requisição no Laravel
Entenda o caminho que uma URL percorre até exibir o conteúdo:
sequenceDiagram
participant U as Usuário
participant R as Rotas
participant C as Controller
participant M as Model
participant V as View
U->>R: Acessa uma URL
R->>C: Chama o método do Controller
C->>M: Solicita dados
M-->>C: Retorna dados do Banco
C->>V: Passa dados para o Blade
V-->>U: Exibe a página HTML
🛠️ Instalação e Primeiro Setup
A maneira mais moderna de instalar o Laravel é via Artisan ou Installer.
🧠 Conceito: O Artisan
O artisan é a interface de linha de comando (CLI) do Laravel. Ele automatiza tarefas repetitivas.
Dica de Produtividade
Use php artisan list para ver todos os comandos disponíveis. Você vai usá-lo o tempo todo!
🛠️ Exercícios
- Instale o Laravel em sua máquina e execute o servidor.
- Localize a pasta
routese tente criar uma rota que retorne seu nome. - Explore o arquivo
.enve identifique as configurações de banco de dados.
🚀 Mini-Projeto da Aula
Minha Primeira Home Page:
Altere a view padrão do Laravel (welcome.blade.php), adicione um componente Blade simples e exiba informações dinâmicas vindas de uma variável passada pela rota no arquivo web.php.
Aula 04 - Rotas e Controllers 🛤️
🎯 Objetivo da Aula
Dominar o sistema de roteamento do Laravel e entender como os Controllers organizam a lógica de resposta às requisições dos usuários.
📍 Sistema de Rotas
As rotas mapeiam URLs para ações. No Laravel, as rotas web ficam em routes/web.php.
Tipos de Rotas
Podemos responder a diferentes verbos HTTP:
use Illuminate\Support\Facades\Route;
Route::get('/contato', function () {
return 'Página de Contato';
});
Route::post('/salvar', function () {
// Processa dados enviados
});
🕹️ Controllers
Em vez de colocar lógica nas rotas, usamos Controllers para manter o código limpo.
Criando um Controller via Artisan
Vinculando Rota ao Controller
use App\Http\Controllers\ProdutoController;
Route::get('/produtos', [ProdutoController::class, 'index']);
📊 Fluxo Rota -> Controller
graph LR
A[URL: /usuarios] --> B{Router}
B --> C[UserController]
C --> D[Método: index]
D --> E[Resposta: View/JSON]
🔗 Parâmetros de Rota
Podemos capturar dados diretamente da URL:
// Rota com parâmetro obrigatório
Route::get('/perfil/{id}', function ($id) {
return "Usuário ID: " . $id;
});
🛡️ Middlewares
Middlewares agem como "filtros" entre a requisição e a resposta (ex: verificar se o usuário está logado).
Segurança
Nunca deixe rotas administrativas expostas sem o middleware auth.
🧠 Blocos de Destaque
Validação Básica
O Laravel permite validar dados diretamente no Controller usando o método $request->validate().
🛠️ Exercícios Progressivos
- Básico: Crie uma rota que receba um nome e retorne "Bem-vindo, [nome]".
- Intermediário: Crie um
UserControllere uma rota que aponte para o métodoshow. - Desafio: Crie um grupo de rotas com o prefixo
/admine proteja-as simulando um middleware.
🚀 Mini-Projeto da Aula
Gerenciador de Links:
Crie um sistema de rotas dinâmicas que redirecione o usuário para diferentes redes sociais baseado no parâmetro passado na URL (ex: /social/github -> redireciona para seu perfil). Use um Controller para lidar com os redirecionamentos.
Aula 05 - Views com Blade 🎨
🎯 Objetivo da Aula
Aprender a criar interfaces dinâmicas utilizando o Blade, o poderoso motor de templating do Laravel. Vamos explorar layouts, componentes e diretivas que facilitam a criação de páginas reutilizáveis.
🖌️ O que é o Blade?
O Blade é um motor de templates simples, mas poderoso. Ao contrário de outros motores PHP, o Blade não impede que você use código PHP puro nas suas views, mas fornece atalhos elegantes para tarefas comuns.
Extensão de Arquivo
Todos os arquivos Blade devem ter a extensão .blade.php e são armazenados em resources/views.
🏗️ Layouts e Herança
Em vez de repetir o cabeçalho e o rodapé em toda página, criamos um layout base.
Layout Base (app.blade.php)
<html>
<head>
<title>Meu Site - @yield('title')</title>
</head>
<body>
<nav>Menu Principal</nav>
<div class="content">
@yield('content')
</div>
</body>
</html>
Usando o Layout (home.blade.php)
@extends('layouts.app')
@section('title', 'Página Inicial')
@section('content')
<h1>Bem-vindo à Home!</h1>
@endsection
📊 Fluxo de Renderização do Blade
graph LR
A[Controller] --> B[Passa Dados]
B --> C{Blade Engine}
C --> D[Layouts/Seções]
D --> E[Componentes]
E --> F[HTML Final]
📜 Diretivas do Blade
As diretivas são atalhos que começam com @.
| Diretiva | Descrição |
|---|---|
@if, @else |
Condicionais simples. |
@foreach |
Loops para arrays e coleções. |
@auth, @guest |
Verificação de autenticação. |
@include |
Inclui outra view parcial. |
🧩 Componentes Blade
Componentes são pedaços de UI reutilizáveis (como um botão ou um card).
Uso na view:
🧠 Blocos de Destaque
Dica de Design
O Laravel se integra perfeitamente com Tailwind CSS ou Bootstrap. Você pode usar as classes desses frameworks diretamente dentro dos seus arquivos Blade.
🛠️ Exercícios Progressivos
- Básico: Crie uma view que exiba uma lista de nomes usando
@foreach. - Intermediário: Crie um layout base com uma seção lateral (sidebar) e uma home que o herde.
- Desafio: Crie um componente
Cardque receba um título e um conteúdo viaslot.
🚀 Mini-Projeto da Aula
Dashboard de Perfil: Crie um layout mestre e uma página de perfil que exiba informações de um usuário (nome, bio, skills). As skills devem ser iteradas a partir de um array passado pelo Controller e o design deve usar um componente Blade para os cards.
Aula 06 - Banco de Dados e Migrations 🗄️
🎯 Objetivo da Aula
Entender como o Laravel gerencia o esquema do banco de dados através das Migrations. Vamos aprender a versionar nosso banco e popular dados iniciais com Seeders e Factories.
🛡️ Migrations: O Git do seu Banco
Migrations permitem que você defina a estrutura da tabela em código PHP, garantindo que todos os desenvolvedores do time tenham a mesma estrutura de banco.
Criando uma Migration
Definindo a Estrutura
public function up(): void
{
Schema::create('produtos', function (Blueprint $table) {
$table->id();
$table->string('nome');
$table->decimal('preco', 8, 2);
$table->timestamps();
});
}
🔄 Comandos Essenciais
📊 Fluxo de Versão do Banco
graph TD
A[Migration 1: Users] --> B[Migration 2: Posts]
B --> C[Migration 3: Comments]
C --> D{Artisan Migrate}
D --> E[Tabela Users]
D --> F[Tabela Posts]
D --> G[Tabela Comments]
🌲 Seeders e Factories
- Seeders: Servem para inserir dados específicos ou fixos (ex: um usuário admin).
- Factories: Servem para gerar milhares de dados de teste aleatórios usando a biblioteca Faker.
Exemplo de Factory
User::factory()->count(50)->create(); - Isso cria 50 usuários fictícios no banco em segundos!
🧠 Blocos de Destaque
Atenção com .env
Certifique-se de configurar corretamente as credenciais (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD) no seu arquivo .env antes de rodar as migrations.
🛠️ Exercícios Progressivos
- Básico: Crie uma migration para uma tabela
categoriascom apenasidenome. - Intermediário: Adicione uma coluna
descricaona tabelaprodutosusando uma nova migration. - Desafio: Crie um Seeder que cadastre 10 categorias automaticamente ao rodar o comando
db:seed.
🚀 Mini-Projeto da Aula
Cenário de Loja Virtual:
Crie a estrutura de tabelas para um e-commerce simples: produtos, categorias e pedidos. Execute as migrations e use uma Factory para popular o banco com 100 produtos de teste para que possamos testar a performance no futuro.
Aula 07 - Eloquent ORM 💎
🎯 Objetivo da Aula
Dominar o Eloquent, o ORM (Object-Relational Mapper) do Laravel. Vamos aprender a interagir com o banco de dados usando objetos PHP, sem escrever uma única linha de SQL manual, e entender como gerenciar relacionamentos complexos.
🐘 O que é o Eloquent?
O Eloquent transforma tabelas do banco em classes PHP (Models).
- Uma Tabela produtos vira uma Classe Produto.
- Uma Linha da tabela vira um Objeto dessa classe.
Consultas Básicas
// Buscar todos os produtos
$produtos = Produto::all();
// Buscar pelo ID
$produto = Produto::find(1);
// Criar novo registro
$novo = Produto::create(['nome' => 'Teclado', 'preco' => 150.00]);
🔗 Relacionamentos
Esta é a parte mais poderosa do Eloquent.
| Tipo | Método | Exemplo |
|---|---|---|
| 1 para 1 | hasOne / belongsTo |
Usuário e Perfil. |
| 1 para N | hasMany / belongsTo |
Post e Comentários. |
| N para N | belongsToMany |
Alunos e Disciplinas. |
Exemplo em Código (1:N)
class Post extends Model {
public function comentarios() {
return $this->hasMany(Comentario::class);
}
}
📊 Estrutura de Relacionamento
erDiagram
CATEGORIA ||--o{ PRODUTO : possui
PRODUTO ||--o{ ITEM_PEDIDO : contem
CLIENTE ||--o{ PEDIDO : faz
🔍 Scopes e Soft Deletes
- Scopes: Permitem encapsular lógica de consulta (ex:
Produto::ativos()->get()). - Soft Deletes: Em vez de apagar do banco, o Laravel marca como "excluído" (deleted_at), permitindo recuperação posterior.
Segurança
O Eloquent protege automaticamente contra SQL Injection usando prepared statements.
🧠 Blocos de Destaque
Convenção sobre Configuração
O Eloquent assume que sua tabela é o plural do nome da classe (ex: Model User -> Tabela users). Se fugir desse padrão, você deve definir protected $table.
🛠️ Exercícios Progressivos
- Básico: Crie um Model
Clientee busque todos os clientes ordenados pelo nome. - Intermediário: Implemente um relacionamento onde um
Pedidopertence a umCliente. - Desafio: Crie um Query Scope que retorne apenas produtos com preço acima de R$ 100,00.
🚀 Mini-Projeto da Aula
Sistema de Blog Relacional:
Crie os Models Post e Comentario. Implemente o relacionamento entre eles e crie uma pequena interface (via Controller e Rota) que exiba um post específico e todos os seus comentários logo abaixo, garantindo que tudo seja carregado via Eloquent.
Macro Syntax Error
File: aulas/aula-08.md
Line 64 in Markdown file: unexpected char '$' at 1634
Aula 09 - Autenticação e Autorização 🔐
🎯 Objetivo da Aula
Aprender a proteger sua aplicação utilizando os sistemas de autenticação nativos do Laravel. Vamos explorar o Laravel Breeze para um setup rápido e entender a diferença entre Autenticação (quem você é) e Autorização (o que você pode fazer).
🚪 Autenticação: Laravel Breeze
O Laravel não reinventa a roda. Ele fornece "scaffoldings" prontos que já vêm com login, registro, recuperação de senha e verificação de e-mail.
Instalando o Breeze
📊 Fluxo de Autenticação
sequenceDiagram
participant U as Usuário
participant L as Página Login
participant B as Backend (Auth)
participant D as Banco de Dados
U->>L: Digita e-mail/senha
L->>B: Envia requisição POST
B->>D: Verifica credenciais
D-->>B: Credenciais Corretas
B-->>U: Inicia Sessão e Redireciona
🛡️ Autorização: Gates e Policies
Depois que o usuário está logado, precisamos saber se ele tem permissão para realizar certas ações.
- Gates: São úteis para ações simples que não estão ligadas a um model específico.
- Policies: São classes que organizam a lógica de autorização para um model específico (ex: PostPolicy).
Exemplo de Policy
public function update(User $user, Post $post)
{
// Apenas o dono do post pode editá-lo
return $user->id === $post->user_id;
}
🚦 RBAC (Role-Based Access Control)
O controle de acesso baseado em funções permite que você defina perfis como "Admin", "Editor" e "Usuário Comercial", garantindo permissões granulares.
Dica de Segurança
Use o middleware can:update,post nas suas rotas para aplicar as policies automaticamente.
🧠 Blocos de Destaque
Confirmação de Senha
O Laravel possui um middleware chamado password.confirm que exige que o usuário digite a senha novamente antes de acessar áreas sensíveis do sistema.
🛠️ Exercícios Progressivos
- Básico: Instale o Laravel Breeze em um projeto limpo e crie um usuário de teste.
- Intermediário: Proteja uma rota de
/dashboardpara que apenas usuários logados possam entrar. - Desafio: Crie um Gate chamado
admin-onlyque permita o acesso apenas se o e-mail do usuário terminar em@admin.com.
🚀 Mini-Projeto da Aula
Sistema de Blog Protegido: Implemente um sistema onde todos podem ler os posts, mas apenas usuários autenticados podem comentar. Além disso, garanta que um usuário só possa excluir o seu próprio comentário através de uma Policy.
Aula 10 - APIs REST com Laravel 🌐
🎯 Objetivo da Aula
Transformar sua aplicação Laravel em um backend poderoso para aplicações modernas (Mobile, SPA). Vamos aprender a criar endpoints JSON, usar API Resources para formatar respostas e entender o versionamento de APIs.
📡 O que é uma API REST?
REST é um conjunto de princípios que permite que sistemas diferentes se comuniquem via HTTP usando formatos padrão como JSON. No Laravel, as rotas de API ficam em routes/api.php e não possuem estado (stateless).
Sem Sessão
Diferente das rotas web, as rotas de API não usam cookies de sessão por padrão. Elas usam tokens (como JWT ou Sanctum).
📦 API Resources
Eles servem como uma camada de transformação entre seus Models do banco e a resposta JSON que o cliente recebe.
Criando um Resource
Formatando a Resposta
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'nome_do_produto' => $this->nome,
'preco_formatado' => 'R$ ' . number_format($this->preco, 2, ',', '.'),
'links' => [
'self' => route('api.produtos.show', $this->id),
]
];
}
📊 Fluxo de uma Requisição API
graph LR
A[Cliente: Mobile/React] -->|GET /api/users| B[Laravel Router]
B --> C[UserController]
C --> D[Eloquent Model]
D --> E[API Resource]
E -->|JSON| A
🔄 Respostas HTTP e Status Codes
É fundamental retornar o código correto para que o cliente saiba o que aconteceu: - 200 OK: Sucesso. - 201 Created: Registro criado com sucesso. - 422 Unprocessable Entity: Erro de validação. - 401 Unauthorized: Falta de autenticação.
🧠 Blocos de Destaque
Versionamento
Sempre versione sua API (ex: /api/v1/produtos). Isso permite que você faça mudanças drásticas sem quebrar os aplicativos antigos dos usuários.
🛠️ Exercícios Progressivos
- Básico: Crie uma rota em
api.phpque retorne uma lista de nomes em formato JSON. - Intermediário: Crie um Resource para o model
Tarefae oculte campos sensíveis comopasswordoudeleted_at. - Desafio: Implemente o método
storeem um Controller de API que valide os dados e retorne o status201com o objeto criado.
🚀 Mini-Projeto da Aula
Catálogo Digital API: Desenvolva uma API para um catálogo de produtos. O projeto deve ter endpoints para listar produtos (filtrados por categoria), ver detalhes de um produto e criar novos produtos (protegido por um token simples). Use API Resources para garantir que a resposta JSON seja elegante e profissional.
Macro Syntax Error
File: aulas/aula-11.md
Line 16 in Markdown file: unexpected char '$' at 735
Aula 12 - Testes Automatizados 🧪
🎯 Objetivo da Aula
Descobrir por que desenvolvedores seniores escrevem testes. Vamos aprender a utilizar o PHPUnit (embutido no Laravel) para criar testes de unidade e testes de funcionalidade (feature), garantindo que sua aplicação não quebre após cada mudança.
🧬 Por que testar?
- Confiança: Você sabe que seu código funciona.
- Refatoração: Você pode mudar o código antigo sem medo de estragar o que já estava pronto.
- Documentação: Os testes servem como um manual de como o sistema deve se comportar.
🛠️ Tipos de Testes no Laravel
1. Testes de Unidade (Unit)
Testam uma pequena parte isolada do código (ex: uma função matemática ou uma classe simples), sem tocar no banco de dados.
2. Testes de Funcionalidade (Feature)
Testam uma funcionalidade completa, simulando uma requisição HTTP, passando pelo controller, banco de dados e verificando a resposta.
📊 Pirâmide de Testes
graph TD
A[Unit Tests - Muitos/Rápidos] --- B[Feature Tests - Médio]
B --- C[E2E/Browser Tests - Poucos/Lentos]
💻 Criando seu primeiro teste
Exemplo de Teste de Feature:
public function test_usuario_pode_ver_a_home()
{
$response = $this->get('/');
$response->assertStatus(200);
}
🏗️ TDD (Test Driven Development)
O ciclo do TDD consiste em: 1. Red: Escreva um teste que falha (porque a funcionalidade ainda não existe). 2. Green: Escreva o código mínimo para o teste passar. 3. Refactor: Melhore o código mantendo o teste passando.
🧠 Blocos de Destaque
Banco de Dados de Teste
O Laravel usa automaticamente um banco sqlite :memory: se configurado no phpunit.xml, tornando os testes extremamente rápidos!
🛠️ Exercícios Progressivos
- Básico: Crie um teste que verifique se a rota de login está acessível (Status 200).
- Intermediário: Crie um teste que tente cadastrar um produto sem nome e verifique se há um erro de validação.
- Desafio: Use o método
$this->actingAs($user)para testar se apenas usuários logados podem acessar a página administrativa.
🚀 Mini-Projeto da Aula
Calculadora de Frete Testada: Desenvolva uma classe simples que calcula o frete baseado na distância. Em seguida, escreva pelo menos 5 testes de unidade cobrindo diferentes cenários: frete grátis para curtas distâncias, frete fixo, erro para distâncias negativas, etc.
Macro Syntax Error
File: aulas/aula-13.md
Line 57 in Markdown file: unexpected char '$' at 1594
Aula 14 - Filas, Eventos e Jobs ⚡
🎯 Objetivo da Aula
Aprender a tornar sua aplicação muito mais rápida movendo tarefas pesadas para o "background". Vamos explorar Jobs, Queues (filas) e o sistema de Eventos/Listeners para criar uma arquitetura desacoplada.
🕰️ O Problema das Tarefas Lentas
Imagine que o usuário se cadastra e você precisa enviar um e-mail de boas-vindas. Se o servidor de e-mail demorar 5 segundos, o usuário ficará esperando com a tela travada. Solução: Colocar o envio de e-mail em uma fila e responder ao usuário imediatamente.
📊 Processamento Assíncrono com Filas
sequenceDiagram
participant U as Usuário
participant C as Controller
participant Q as Fila (Redis/Banco)
participant W as Worker (Background)
U->>C: Clica em "Comprar"
C->>Q: Adiciona Job "Gerar PDF"
C-->>U: "Sua compra está sendo processada!"
Note over Q,W: O Worker pega o job da fila
W->>W: Gera o PDF pesado
W->>U: Envia e-mail com o PDF
⚒️ Criando um Job
Como despachar o job:
ProcessarRelatorio::dispatch($dados);
🔔 Eventos e Listeners
Eventos permitem que partes diferentes do sistema "ouçam" quando algo importante acontece.
- Evento: PedidoRealizado.
- Listeners: EnviarEmailCliente, BaixarEstoque, NotificarLogistica.
Desacoplamento
O Controller de Pedidos não precisa saber como o estoque é baixado. Ele apenas dispara o evento.
🧠 Blocos de Destaque
Cache com Redis
Para aplicações de alta performance, use o Redis como driver de fila e cache. Ele é extremamente rápido porque armazena os dados na memória RAM.
🛠️ Exercícios Progressivos
- Básico: Configure o driver de fila para
databaseno seu.enve rode a migrationqueue:batches-table. - Intermediário: Crie um Job que apenas escreva uma mensagem no log (
Log::info) e despache-o através de uma rota. - Desafio: Implemente um Evento que seja disparado sempre que um produto for criado, enviando um e-mail fictício para o administrador.
🚀 Mini-Projeto da Aula
Relatório por E-mail: Crie um botão "Gerar Relatório de Vendas". Ao clicar, o sistema deve despachar um Job que simule um processamento pesado (sleep de 10 segundos) e, ao terminar, registre no log que o relatório está pronto. O usuário deve receber uma mensagem instantânea dizendo: "Seu relatório está sendo gerado e será enviado em breve".
Aula 15 - Docker e Deploy 🐳🚀
🎯 Objetivo da Aula
Preparar sua aplicação para o mundo real. Vamos aprender a "containerizar" o Laravel usando Docker, configurar o ambiente de produção com o arquivo .env e entender as estratégias de deploy em VPS ou Cloud.
🐳 Docker e Laravel Sail
O Docker garante que a aplicação funcione exatamente igual na sua máquina e no servidor. O Laravel fornece o Sail, uma interface CLI leve para interagir com o Docker.
📊 Estrutura de Containers
graph TD
A[Nginx/Apache] --> B[Laravel PHP-FPM]
B --> C[MySQL Database]
B --> D[Redis Cache/Queue]
B --> E[Mailpit (Teste de Email)]
⚙️ Configuração de Produção
No servidor, algumas regras mudam drasticamente:
- APP_ENV=production
- APP_DEBUG=false (CRITICAL!)
- PHP artisan config:cache (Para performance)
🚀 Estratégias de Deploy
- Deploy em VPS (DigitalOcean/Linode):
- Configuração manual do Nginx, PHP e Banco.
-
Uso de ferramentas como o Laravel Forge para automação.
-
Deploy em Cloud/PaaS (Heroku/Railway):
- Deploy baseado em Git (
git push production). - Containers prontos para escalar.
🧠 Blocos de Destaque
CI/CD com GitHub Actions
Você pode configurar o GitHub para rodar seus testes automaticamente a cada git push e, se tudo passar, realizar o deploy para o servidor.
🛠️ Exercícios Progressivos
- Básico: Instale o Docker em sua máquina e tente subir um projeto novo usando o Laravel Sail.
- Intermediário: Altere o arquivo
docker-compose.ymlpara adicionar um serviço de Adminer (gerenciador de banco visual). - Desafio: Crie um script bash simples que automatize o processo de
git pull,composer installephp artisan migrateno servidor.
🚀 Mini-Projeto da Aula
Ambiente Próximo da Produção:
Configure um arquivo docker-compose.yml que contenha: WordPress (ou outro serviço), Laravel, MySQL e um Container de Proxy. Garanta que a aplicação Laravel consiga se conectar ao banco de dados usando apenas o nome do serviço definido no Docker.
Aula 16 - Projeto Final e Boas Práticas 🏁
🎯 Objetivo da Aula
Consolidar todo o conhecimento adquirido ao longo das 16 aulas. Vamos discutir arquitetura de software, padrões profissionais e apresentar as diretrizes para o desenvolvimento do sistema final do curso.
🏗️ Padrões Profissionais (Clean Code)
Para atuar em grandes empresas, seu código Laravel deve seguir padrões como: - Single Responsibility: Cada classe ou método deve ter apenas um motivo para mudar. - Service Layer: Mova a lógica pesada dos Controllers para classes de "Service". - Repository Pattern: Isole a lógica de consulta ao banco de dados (opcional, mas comum).
📊 Visão Geral do Projeto Final
Abaixo, o fluxo esperado para o sistema que você irá desenvolver:
graph TD
A[Autenticação Robustas] --> B[CRUD Completo com Relacionamentos]
B --> C[API REST para Mobile]
C --> D[Processamento em Background - Jobs]
D --> E[Ambiente Dockerizado]
E --> F[Testes Automatizados - Min 70% coverage]
🚀 Sugestões de Temas
Escolha um dos temas abaixo ou proponha um novo ao professor: 1. Sistema de Gestão de Projetos (Kanban): Com boards, tarefas, prazos e notificações. 2. Plataforma de E-commerce Básico: Com catálogo, carrinho, checkout e histórico de pedidos. 3. Sistema Acadêmico: Gestão de alunos, notas, frequências e emissão de certificados em PDF.
📝 Requisitos Obrigatórios
- [ ] Uso de Migrations e Seeders.
- [ ] Autenticação com Laravel Breeze ou Jetstream.
- [ ] Pelo menos 2 relacionamentos complexos (ex: N:N).
- [ ] Validação rigorosa em todos os formulários.
- [ ] Listagem com Paginação e Filtros.
- [ ] Upload de arquivos/imagens.
- [ ] Pelo menos 1 Job assíncrono.
- [ ] Suíte de testes básicos de feature.
🧠 Blocos de Destaque
O Caminho do Desenvolvedor
O aprendizado não termina aqui. O ecossistema Laravel é vasto: explore o Livewire, Inertia.js, Nova e Vapor. A comunidade é uma das mais ativas e acolhedoras do mundo!
🛠️ Revisão de Carreira
- LinkedIn: Como destacar seus projetos Laravel.
- GitHub: Organização de repositórios e READMEs profissionais.
- Portfólio: Hospede seu projeto final e mostre ao mundo!
🏆 Conclusão do Curso
Parabéns por chegar até aqui! Você agora possui as competências necessárias para desenvolver, testar e publicar aplicações web profissionais com PHP e Laravel.
Sucesso na sua jornada como desenvolvedor! 🐘🚀
Exercícios
Listas de Exercícios 🏋️
Pratique o que aprendeu com desafios graduais para cada aula de PHP e Laravel.
-
Módulo 1: PHP Moderno e POO ---
-
Módulo 2: Domínio do Framework ---
-
Módulo 3: Recursos Avançados ---
-
Módulo 4: Ecossistema e Deploy ---
Exercícios: Aula 01 - Introdução ao PHP Moderno 🐘
🟢 Básico
- Ambiente: Execute o comando para verificar a versão do PHP no seu terminal e descreva três melhorias introduzidas na versão 8.x que você considera importantes.
- Sintaxe: Escreva um script PHP que contenha uma constante para o nome de um curso e uma variável para a carga horária. Imprima os valores usando interpolação de strings.
🟡 Intermediário
- Tipagem: Crie uma função chamada
calcularDescontoque aceite um parâmetrovalor(float) e umporcentagem(int). A função deve retornar o valor com desconto, garantindo o uso de tipagem rigorosa tanto nos parâmetros quanto no retorno. - Composer: Explique o papel do arquivo
composer.jsone do diretóriovendor. O que acontece se você apagar a pastavendore executarcomposer install?
🔴 Desafio
- Autoloading Manual: Sem usar o Composer, crie uma função simples de
spl_autoload_registerque carregue classes de uma pasta chamadaClasses/baseada no nome da classe. Teste instanciando uma classeUsuarioque esteja dentro desse diretório.
Exercícios: Aula 02 - Fundamentos de PHP e POO 🏗️
🟢 Básico
- Estruturas: Converta um bloco de
switch/caseque valida dias da semana em números (1 a 7) para a nova expressãomatchdo PHP 8. - POO Simples: Crie uma classe
Livrocom as propriedades públicastituloeautor. Instancie dois objetos e exiba seus nomes.
🟡 Intermediário
- Encapsulamento: Refatore a classe
Livrodo exercício anterior tornando as propriedades privadas. Adicione métodosgettersesetters, e no construtor use a técnica de "Constructor Property Promotion" do PHP 8. - Herança: Crie uma classe base
Eletronicoe uma subclasseSmartphone. A subclasse deve herdar a propriedadevoltageme implementar um método exclusivoligar5G().
🔴 Desafio
- Abstração e Polimorfismo: Crie uma classe abstrata
FormaGeometricacom um método abstratocalcularArea(). Implemente as classesQuadradoeCirculoherdando desta base. Crie um array de formas e itere sobre ele chamando o método de cálculo de área.
Exercícios: Aula 03 - Introdução ao Framework Laravel 🚀
🟢 Básico
- Servidor: Qual o comando do Artisan utilizado para iniciar o servidor de desenvolvimento e em qual porta ele roda por padrão?
- Navegação: Explore a estrutura de pastas de um projeto novo e identifique onde ficam guardadas as configurações de e-mail e as chaves de API.
🟡 Intermediário
- Rotas: Crie uma rota direta em
web.phpque retorne uma saudação personalizada baseada em um parâmetro opcional na URL. Se o nome não for passado, deve retornar "Olá, Visitante". - Ambiente: O que é o arquivo
.env.example? Explique a importância de nunca versionar o arquivo.envreal no Git.
🔴 Desafio
- Exploração Técnica: No Laravel, o que é o "Service Container" e como ele se diferencia de uma classe comum em PHP? Pesquise brevemente sobre Injeção de Dependências.
Exercícios: Aula 04 - Rotas e Controllers 🛤️
🟢 Básico
- Comandos: Escreva o comando Artisan completo para criar um Controller chamado
SiteController. - Mapeamento: Crie uma rota que aponte para o método
contatode um controller e explique a diferença entre usar uma Closure (função anônima) e um Controller na rota.
🟡 Intermediário
- Parâmetros: Implemente uma rota que receba dois parâmetros:
categoriaeslug_artigo. O controller deve retornar uma frase formatada: "Exibindo artigo [slug] da categoria [categoria]". - Nomenclatura: O que são "Named Routes" (Rotas Nomeadas)? Crie uma rota com o nome
admin.dashboarde mostre como gerar a URL para essa rota dentro de um Controller.
🔴 Desafio
- Grupos e Prefixos: Crie um grupo de rotas que utilize o prefixo
api/v1e aplique o middlewarethrottle:60,1. Explique o que esse middleware faz na prática.
Macro Syntax Error
File: exercicios/exercicio-05.md
Line 4 in Markdown file: unexpected char '$' at 110
Exercícios: Aula 06 - Banco de Dados e Migrations 🗄️
🟢 Básico
- Migrations: Escreva o comando Artisan para criar uma nova migration que adicione uma tabela
fornecedores. - Rollback: O que acontece com os dados do seu banco se você executar o comando
php artisan migrate:rollback?
🟡 Intermediário
- Alteração: Crie uma migration para adicionar uma coluna
telefone(string) eativo(boolean com padrão true) à tabelaclientesjá existente. - Seeders: Explique a diferença prática entre usar um
Seedere umaFactory. Em qual situação você usaria cada um?
🔴 Desafio
- Relacionamentos Físicos: Crie uma migration para uma tabela
itens_pedidoque contenha uma chave estrangeira (foreignId) apontando para a tabelapedidos. Garanta que, se o pedido for deletado, os itens também sejam excluídos automaticamente (onDelete('cascade')).
Exercícios: Aula 07 - Eloquent ORM 💎
🟢 Básico
- Busca: Como você buscaria um único registro pelo seu ID usando o Eloquent? E como buscaria apenas o primeiro registro que atenda a uma condição de
nome? - Convenções: Se você tem uma tabela chamada
super_herois, qual deve ser o nome da classe Model no Laravel para que ele a reconheça automaticamente?
🟡 Intermediário
- Persistência: Demonstre as duas formas de salvar um novo registro no banco: instanciando o objeto e usando o método estático
create(). Não esqueça de mencionar a propriedade$fillable. - Relacionamentos: Implemente o código do método dentro de um Model
Autorpara definir que ele possui muitosLivros. Em seguida, mostre como você iteraria sobre os livros de um autor específico na View.
🔴 Desafio
- Eager Loading: O que é o problema das "N+1 consultas" e como o método
with()do Eloquent resolve isso? Dê um exemplo prático de como listar 50 posts e seus respectivos autores de forma performática.
Exercícios: Aula 08 - CRUD Completo 🛠️
🟢 Básico
- Rotas: Escreva a linha de código necessária em
web.phppara gerar todas as rotas de um CRUD deProdutosde uma única vez. - CSRF: Por que o erro "419 | Page Expired" acontece ao enviar um formulário e como corrigi-lo?
🟡 Intermediário
- Validação: No método
updatede um controller, implemente uma validação que exija que o campoemailseja obrigatório, tenha um formato válido de e-mail e seja único no banco de dados (exceto para o id do próprio registro que está sendo editado). - Feedback: Como você envia uma mensagem de sucesso ("Produto atualizado!") de um Controller para a View usando "Flash Messages"?
🔴 Desafio
- Segurança e UX: Implemente uma lógica onde, antes de excluir um registro no método
destroy, o sistema verifique se aquele item possui dependências em outras tabelas (ex: não deletar uma categoria que possui produtos vinculados). Se possuir, retorne um erro amigável para o usuário.
Exercícios: Aula 09 - Autenticação e Autorização 🔐
🟢 Básico
- Comandos: Escreva o comando do Artisan para instalar o Laravel Breeze usando a stack de "Blade" e o motor de testes "Pest".
- Setup: Após rodar o comando de instalação do Breeze, quais outros comandos de terminal você deve rodar para que o front-end e o banco de dados estejam prontos?
🟡 Intermediário
- Gates: Crie um Gate chamado
ver-relatoriodentro doAuthServiceProvider. Ele deve permitir o acesso apenas se o usuário tiver o cargo (role) de 'gerente'. - Middlewares: Demonstre como você protegeria um grupo de rotas para que apenas usuários logados possam acessá-las, usando o arquivo
web.php.
🔴 Desafio
- Policies: Crie uma classe Policy para o model
Documento. Implemente o métodoviewque permite que um usuário visualize o documento apenas se ele for o autor (user_id) OU se ele tiver um perfil de 'admin'. Mostre como usar essa policy em um Controller.
Exercícios: Aula 10 - APIs REST com Laravel 🌐
🟢 Básico
- Rotas: No Laravel, em qual arquivo devemos registrar as rotas de uma API e qual o prefixo que elas ganham automaticamente?
- Formatação: Por que é recomendável usar um formato padrão como JSON para as respostas da API em vez de simplesmente retornar uma string ou HTML?
🟡 Intermediário
- API Resources: Crie um Resource
LogResource. No métodotoArray, formate a data de criação (created_at) para o padrão brasileiro (d/m/Y H:i) e renomeie o campoidparaid_do_log. - Respostas: Como você retornaria um erro 404 propositalmente em um controller de API caso um registro não fosse encontrado, garantindo que a resposta seja no formato JSON?
🔴 Desafio
- Versionamento e Injeção: Crie uma estrutura de diretórios para que sua API suporte
/api/v1/e/api/v2/. Explique a importância de injetar o Model por parâmetro (Route Model Binding) diretamente no método do Controller da API.
Exercícios: Aula 11 - Segurança em Aplicações Web 🛡️
🟢 Básico
- XSS: Mostre como o Laravel (motor Blade) protege automaticamente uma variável que venha de um input do usuário contendo uma tag
<script>. - Debug: Por que é perigoso deixar a variável
APP_DEBUG=trueem um servidor de produção? O que um invasor poderia descobrir através de uma tela de erro?
🟡 Intermediário
- Hash: Use a Facade
Hashpara simular o processo de verificação de uma senha. Crie um hash e depois valide se a string "123456" corresponde àquele hash. - Rate Limiter: Configure um limite de 5 tentativas de acesso por minuto para uma rota de login. Explique qual status HTTP o usuário receberá caso exceda esse limite.
🔴 Desafio
- Boas Práticas: Pesquise sobre o middleware
TrustProxies. Em qual cenário de deploy (como usar Cloudflare ou Load Balancers) ele se torna essencial para a segurança da aplicação?
Exercícios: Aula 12 - Testes Automatizados 🧪
🟢 Básico
- Comandos: Qual o comando do Artisan para rodar toda a sua suíte de testes e como você pode rodar apenas um arquivo de teste específico?
- Conceito: Explique a principal diferença entre um teste de Unidade (Unit) e um teste de Funcionalidade (Feature) no contexto do Laravel.
🟡 Intermediário
- Asserções: Crie um teste de Feature que acesse a rota
/api/statuse verifique: se o status code é 200 e se o JSON retornado contém a chave"status" => "online". - Database Testing: O que o trait
RefreshDatabasefaz quando adicionado a uma classe de teste? Por que ele é fundamental para testes que interagem com o banco?
🔴 Desafio
- TDD na Prática: Escreva o plano de teste (em passos) para uma funcionalidade de "Esqueci minha senha". O que você testaria primeiro e quais seriam as asserções finais para garantir que o e-mail foi realmente disparado?
Exercícios: Aula 13 - Upload de Arquivos e Storage 📂
🟢 Básico
- Link Simbólico: Qual o comando exato utilizado para criar o link simbólico entre a pasta
storage/app/publice a pastapublic/storage? - Helper: Como você gera uma URL pública para um arquivo que foi salvo no disco
publicusando o helperasset?
🟡 Intermediário
- Validação: Escreva as regras de validação para um campo de upload que: deve ser obrigatório, deve ser uma imagem (jpg ou png) e não pode exceder 500 KB.
- Armazenamento: Qual a diferença entre os métodos
store()estoreAs()? Em qual cenário você usaria ostoreAs()?
🔴 Desafio
- Multi-Disk e Cleanup: Implemente um pequeno código em PHP que salve um arquivo no disco local e, logo em seguida, mova-o para um disco fictício chamado
s3. O código deve garantir que o arquivo original seja deletado do disco local após o upload para a nuvem.
Exercícios: Aula 14 - Filas, Eventos e Jobs ⚡
🟢 Básico
- Drivers: Identifique no arquivo
.envqual o driver de fila padrão (QUEUE_CONNECTION) de um novo projeto Laravel e cite outros dois drivers comuns usados em produção. - Workers: Qual o comando do Artisan que deve ser executado para que os jobs que estão na fila comecem a ser processados?
🟡 Intermediário
- Despacho: Mostre como disparar um Job chamado
EnviarRelatoriopassando um ID de usuário como parâmetro, configurando um atraso de 10 minutos para o processamento (delay). - Listeners: Explique a diferença entre um Evento e um Listener. Um único Evento pode ter múltiplos Listeners? Dê um exemplo.
🔴 Desafio
- Monitoramento e Falhas: O que acontece se um Job falhar durante a execução? Como você configuraria o Job para tentar novamente 3 vezes antes de desistir (
tries)?
Exercícios: Aula 15 - Docker e Deploy 🐳🚀
🟢 Básico
- Comandos Docker: Liste os comandos para subir e derrubar o ambiente do Laravel Sail no seu terminal.
- Ambiente: No arquivo
.envde produção, as variáveisAPP_DEBUGeAPP_ENVdevem assumir quais valores para garantir segurança e performance?
🟡 Intermediário
- Containerização: Explique para que serve o arquivo
docker-compose.ymle quais são os serviços mínimos necessários para rodar uma aplicação Laravel com banco de dados MySQL. - Caches de Produção: Por que rodar comandos como
php artisan config:cacheephp artisan route:cacheé fundamental em um ambiente de produção?
🔴 Desafio
- Fluxo de Deploy: Desenvolva um checklist de 5 passos técnicos que você executaria ao subir sua aplicação em uma VPS nova pela primeira vez.
Exercícios: Aula 16 - Projeto Final 🏁
🟢 Básico
- Arquitetura: Defina qual será o tema do seu projeto final e escreva os nomes das 3 tabelas principais que ele terá.
- Recursos: Identifique pelo menos duas funcionalidades avançadas (Filas, Uploads, APIs) que você planeja implementar no seu sistema.
🟡 Intermediário
- Modelagem: Desenhe (em texto ou diagrama simples) como será a relação entre suas tabelas (ex: 1:N entre Usuário e Tarefas).
- Segurança: Descreva como você pretende proteger as rotas administrativas do seu sistema usando o Laravel Breeze e Middlewares.
🔴 Desafio
- Pitch Técnico: Escreva um parágrafo "vendendo" seu projeto final, focando nas tecnologias Laravel utilizadas e nos problemas que o sistema resolve para o usuário final.
Projetos
Projetos Práticos 🚀
Desenvolva aplicações reais passo a passo enquanto domina o ecossistema PHP e Laravel.
-
Módulo 1: Primeiros Passos ---
-
Módulo 2: CRUD e Persistência ---
-
Módulo 3: Segurança e APIs ---
-
Módulo 4: Alta Performance e Deploy ---
Projeto 16 - Sistema ERP Profissional 🎓
Este é o projeto de conclusão do curso. Você deve construir uma aplicação robusta utilizando todos os conceitos aprendidos.
Requisitos
- Autenticação e Autorização (Gates/Policies)
- CRUD completo com Relacionamentos (Eloquent)
- Validação no Servidor (FormRequests)
- API REST documentada
- Processamento em Fila (Events/Jobs)
- Containerização com Docker
- Testes de Feature e Unitários
Sugestões de Temas
- [ ] Gestão de Vendas e Estoque
- [ ] Plataforma de Cursos Online
- [ ] Sistema de Agendamentos Médicos
- [ ] Rede Social para Desenvolvedores
Quizzes
Quizzes Interativos 🧠
Teste seus conhecimentos rapidamente ao final de cada módulo de PHP e Laravel.
-
Módulo 1 ---
-
Módulo 2 ---
-
Módulo 3 ---
-
Módulo 4 ---
Quiz 01 - PHP Moderno 🐘
Avalie seus conhecimentos fundamentais sobre a evolução do PHP e o ecossistema moderno.
Quiz 02 - Fundamentos de PHP e POO 🏗️
Teste seus conhecimentos sobre as estruturas do PHP 8 e os pilares da Programação Orientada a Objetos.
Quiz 03 - Introdução ao Laravel 🚀
Avalie seu entendimento inicial sobre o framework Laravel e sua arquitetura.
Quiz 04 - Rotas e Controllers 🛤️
Teste seu domínio sobre a gestão de URLs e o controle de lógica no Laravel.
Macro Syntax Error
File: quizzes/quiz-05.md
Line 8 in Markdown file: unexpected char '$' at 552
Quiz 06 - Banco de Dados e Migrations 🗄️
Avalie seu conhecimento sobre o versionamento de banco de dados e a geração de dados de teste no Laravel.
Quiz 07 - Eloquent ORM 💎
Teste seus conhecimentos sobre o mapeamento objeto-relacional (ORM) do Laravel.
Quiz 08 - CRUD Completo 🛠️
Avalie seu domínio sobre a criação de fluxos completos de dados e validação no Laravel.
Quiz 09 - Autenticação e Autorização 🔐
Avalie seu conhecimento sobre o ecossistema de segurança e permissões do Laravel.
Quiz 10 - APIs REST com Laravel 🌐
Avalie seu entendimento sobre os princípios de APIs, formato JSON e autenticação via Sanctum.
Quiz 11 - Segurança em Aplicações 🛡️
Teste seu conhecimento sobre as proteções nativas do Laravel e as boas práticas de segurança na web.
Quiz 12 - Testes Automatizados 🧪
Avalie seu entendimento sobre a importância dos testes, pirâmide de testes e o fluxo TDD.
Quiz 13 - Upload de Arquivos e Storage 📂
Avalie seu conhecimento sobre a gestão de arquivos físicos e o sistema de Storage do Laravel.
Quiz 14 - Filas, Eventos e Jobs ⚡
Avalie seu conhecimento sobre processamento assíncrono e arquitetura baseada em eventos no Laravel.
Quiz 15 - Docker e Deploy 🐳🚀
Avalie seu conhecimento sobre containerização com Laravel Sail e estratégias de publicação.
Quiz 16 - Projeto Final e Boas Práticas 🏁
Avalie seu conhecimento sobre arquitetura limpa, padrões de projeto e carreira.
Slides
Slides 📺
Material visual para acompanhamento das aulas de PHP e Laravel.
-
Módulo 1 ---
-
Módulo 2 ---
-
Módulo 3 ---
-
Módulo 4 ---
Aula 01 - Introdução ao PHP Moderno 🐘
🎯 Objetivo da Aula
- Entender a evolução histórica do PHP.
- Conhecer as novidades do PHP 8.x.
- Dominar o ecossistema profissional (Composer e PSRs).
- Preparar o "mindset" para o desenvolvimento moderno.
🚀 O PHP não morreu!
- Ele alimenta 77% da web (WordPress, Wikipedia, Slack).
- Evoluiu de uma linguagem de script para uma plataforma robusta.
- O foco atual é: Performance e Tipagem Forte.
⏳ Linha do Tempo
- PHP 5.x: A era de ouro do CMS.
- PHP 7.x: Revolução da performance (PHP-NG).
- PHP 8.x: JIT, Tipagem Union, Atributos e Modernidade Crua.
🌍 Ecossistema Moderno
graph LR
A[Linguagem] --> B[Ecossistema]
B --> C[Composer]
B --> D[PSRs]
C --> E[Packagist]
D --> F[Interoperabilidade]
📦 O Papel do Composer
- Gerenciador de dependências.
- Não é um gerenciador de pacotes do sistema (como apt-get).
- Resolve a "Hell of Dependencies".
🛠️ Comandos Essenciais
composer init: Configura o projeto.composer install: Instala o que está no lock.composer update: Atualiza as versões.
📐 PSRs: O que são?
- PHP Standard Recommendations.
- Criadas pelo PHP-FIG.
- Objetivo: Fazer o código de um desenvolvedor "falar" com o de outro.
🔍 PSR-1 e PSR-12
- Padrões de codificação.
- Tags PHP: sempre
<?php. - CamelCase para métodos.
- PascalCase para Classes.
🔄 PSR-4: Autoloading
- Mapeamento de Namespaces para Pastas.
- Elimina o uso de milhares de
require_once. - Essencial para o Laravel.
🧬 Tipagem Forte (PHP 8)
- Menos bugs em produção. - Melhor suporte da IDE (Autocomplete).⛓️ Union Types
string|int: Quando uma variável pode ser texto ou número.mixed: O tipo curinga (use com moderação).
⚡ Just-In-Time (JIT)
- Compila partes do código para código de máquina em tempo real.
- Ganho massivo em cálculos matemáticos pesados.
🆚 Switch vs Match
match: É uma expressão (retorna valor).- Sem
breaknecessário. - Comparação estrita (
===).
🏗️ Ambiente Profissional
- PHP 8.2+
- Composer 2.x
- Docker (opcional, mas recomendado)
- VS Code + Intelephense
🚩 PSR-7: HTTP Messages
- Padroniza como Req/Res são tratadas.
- Base para middlewares modernos.
📚 Documentação
- PHP.net: O manual supremo.
- Laracasts: A Netflix do PHP.
- Packagist.org: Onde a mágica (pacotes) mora.
💡 Dica de Ouro
- Nunca tente reinventar a roda sem necessidade.
- Se alguém já criou um pacote PSR-4 testado, use-o!
🧗♂️ Desafio Aula 01
- Criar um projeto
composer init. - Instalar o pacote
monolog/monolog. - Gerar um arquivo de log simples.
🏁 Conclusão
- PHP é moderno.
- O ecossistema é baseado em padrões.
- Estamos prontos para o Laravel!
🙋♂️ Dúvidas?
"O código limpo é aquele que parece ter sido escrito por alguém que se importa." (Robert C. Martin)
Aula 02 - Fundamentos de PHP e POO 🏗️
🎯 Objetivo da Aula
- Dominar as estruturas de controle modernas.
- Entender os pilares da POO no PHP 8.
- Aplicar Namespaces e Autoloading.
- Criar classes resilientes e tipadas.
🧱 Blocos de Construção
- Variáveis:
$nome. - Constantes:
const CURSO = 'PHP'. - Arrays:
['u' => 1, 'v' => 2].
🎮 Expressão Match (PHP 8)
- Mais limpo que o switch. - Mais seguro (lança erro se não mapeado).🧬 O que é POO?
- Programação Orientada a Objetos.
- Representar o mundo real em "Objetos".
- Classe = Planta (modelo).
- Objeto = Casa pronta (instância).
🏰 Os 4 Pilares da POO
graph TD
A[POO] --> B[Encapsulamento]
A --> C[Herança]
A --> D[Abstração]
A --> E[Polimorfismo]
🏠 1. Encapsulamento
- Proteger os dados.
- Visibilidade:
public,protected,private. - Getters e Setters (ou Propriedades Readonly).
👨👦 2. Herança
- Reutilizar código entre classes.
- Palavra-chave:
extends. - Evite herança profunda (prefira composição).
🎨 3. Abstração
- Classes que não podem ser instanciadas.
abstract class Animal.- Define o "quê", não o "como".
🎭 4. Polimorfismo
- "Muitas formas".
- Objetos diferentes que respondem ao mesmo método.
- Baseado em Interfaces.
🌟 Constructor Property Promotion
🌟 Constructor Property Promotion
- Menos repetição (DRY).🛑 Classes Readonly
- Garante imutabilidade.
- Perfeito para DTOs (Data Transfer Objects).
readonly class Configuracao { ... }.
📁 Namespaces
- Como se fossem "pastas digitais" no código.
- Evitam conflitos:
App\Models\UservsVendor\Utils\User.
📜 Interfaces
- Um contrato que obriga a classe a ter certos métodos.
interface Notificador { public function enviar(); }.
🧩 Traits
- "Copia e cola" de código inteligente.
- Permite reutilizar métodos em classes diferentes sem herança.
📉 Diagrama de Classe Simples
classDiagram
Animal <|-- Cachorro
Animal <|-- Gato
Animal : +String nome
Animal: +fazerSom()
Cachorro: +fazerSom()
Gato: +fazerSom()
⚠️ Null Safe Operator
$user?->address?->city.- Adeus ao
if ($user !== null && $user->address !== null).
🔬 Type Hinting Avançado
- Tipagem de argumentos.
- Tipagem de retorno.
- Tipagem de propriedades.
💡 Dica de Design
- Favoreça a imutabilidade.
- Use classes ricas (com comportamento), não apenas gavetas de dados.
🧗♂️ Exercício Prático
- Criar a classe
Pedido. - Usar promoção de propriedades.
- Implementar uma trait de
Desconto.
🏁 Resumo
- POO é a base de tudo no Laravel.
- PHP 8 tornou a POO muito menos verbosa.
- O Autoloading une tudo isso.
Aula 03 - Modelagem de APIs RESTful 📡
Recursos, Verbos e Contratos
Agenda 📅
- O que é REST?
- Recursos e URIs
- Verbos HTTP (GET, POST, PUT...)
- Status Codes
- JSON: A Linguagem das APIs
- Boas Práticas de Design
1. REST: A "Língua" da Web 🌐
- Style arquitetural para sistemas distribuídos.
- Baseado no protocolo HTTP.
- Independência entre Client e Server.
Princípios REST
- Stateless: Cada requisição é única.
- Uniform Interface: Padrões compartilhados.
- Cacheable: Melhore a performance.
2. Identificando Recursos 📍
- Um recurso é qualquer coisa que expomos.
- URI: O endereço do recurso.
O que NÃO fazer:
GET /obterUsuarios ❌
O que fazer:
GET /usuarios ✅ (Sempre substantivos no plural!)
3. Os Verbos HTTP 🛠️
Eles definem a intenção da chamada:
- GET: Buscar dados.
- POST: Criar novo dado.
- PUT: Atualizar (Trocar tudo).
- PATCH: Atualizar (Apenas um pedaço).
- DELETE: Remover dado.
Idempotência e Segurança
| Verbo | Seguro? | Idempotente? |
|---|---|---|
| GET | Sim ✅ | Sim ✅ |
| POST | Não ❌ | Não ❌ |
| PUT | Não ❌ | Sim ✅ |
| DELETE | Não ❌ | Sim ✅ |
4. Status Codes: A Resposta 🚦
- 2xx: Deu certo! (200, 201, 204).
- 4xx: Você (cliente) errou algo (400, 401, 404).
- 5xx: Eu (servidor) quebrei (500, 503).
5. O Formato JSON 🏗️
- Leve, legível e universal.
6. Design de URIs Complexas
Como buscar os pedidos de um usuário específico?
GET /usuarios/123/pedidos ✅
- Hierarquia lógica e limpa.
7. Prática: Postman em Ação 💻
- Testando verbos em APIs reais.
- Analisando Headers e Body.
Desafio REST ⚡
Se você quer mudar apenas o e-mail de um usuário, qual verbo deve usar: PUT ou PATCH?
Resumo ✅
- REST é sobre recursos e padrões.
- URIs usam substantivos no plural.
- Status codes guiam o frontend.
- JSON é o padrão de facto.
Próxima Aula: Swagger e Mocks 📝
- Documentação automática.
- Como trabalhar sem o backend pronto?
Dúvidas? 📡
Aula 04 - Documentação e Mocks 📝
Developer Experience e Contratos
Agenda 📅
- Por que documentar?
- OpenAPI vs Swagger
- Swagger UI e Editor
- O Poder dos Mocks
- Developer Experience (DX)
- Ferramentas de Simulação
1. Documentação é DX 🚀
- Sua API é seu produto.
- Documentar economiza tempo de suporte.
- Facilita a integração com Front/Mobile.
2. OpenAPI (OAS) 📜
- O padrão mundial.
- Arquivo YAML ou JSON descritivo.
- Agnóstico de linguagem.
3. Swagger: O Canivete Suíço 🛠️
- Editor: Escreva e valide o contrato.
- UI: Gere a página visual de testes.
- Codegen: Gere código (client/server) automaticamente.
Swagger UI em Ação
- Permite testar endpoints no próprio navegador.
- Mostra exemplos de JSON de entrada e saída.
- Exibe todos os Status Codes possíveis.
4. O Poder dos Mocks 🎭
- Development in Parallel: Front não espera pelo Back.
- Servidor "Fake" que retorna dados reais.
- Valide a experiência antes da implementação complexa.
5. Developer Experience (DX) 👨💻
Como ser amado por outros devs:
- Nomes de rotas claros.
- Erros descritivos no Body.
- Exemplos de requisição.
- Documentação atualizada (ou gerada pelo código).
6. Ferramentas Recomendadas 🧰
- Swagger Editor: Online ou Local.
- Mockoon: Mock local amigável.
- Prism: Mock via CLI.
- Postman: Collections documentadas.
7. Prática: Editando um YAML 💻
- Desenhando um endpoint
GET /tarefas. - Definindo parâmetros de entrada.
- Criando esquemas de dados.
Desafio: Mock vs Stubs ⚡
Qual a principal vantagem de um Mock Server online (como Postman) em relação a um Mock rodando apenas no computador do desenvolvedor?
Resumo ✅
- OpenAPI é o contrato.
- Swagger UI é a vitrine da sua API.
- Mocks destravam o desenvolvimento da equipe.
- DX é o diferencial de uma boa API.
Próxima Aula: Implementação Backend! 💻
Módulo 2: Manipulação de Dados
- Controllers e Services.
- Repositories e Banco de Dados.
- Mão na massa com código real!
Dúvidas? 📝
Aula 05 - Implementação de APIs ⚙️
Controllers e Rotas
Agenda 📅
- Camadas do Backend
- O Papel do Controller
- Rotas e Handlers
- Capturando Dados (Params/Body)
- Status Codes na Prática
- Injeção de Dependência
1. Organização em Camadas 🧱
- Controller: Trata a entrada (HTTP).
- Service: Regras de negócio.
- Repository: Acesso ao banco.
2. O Papel do Controller 🎮
- Ele é o ponto de entrada.
- Não deve ter lógica complexa!
- Deve apenas orquestrar a execução.
Controller = Garçom 🤵 Service = Cozinheiro 👨🍳
3. Rotas e Handlers 📍
- Rota: Verbo HTTP + Path.
- Handler: Função executada.
4. Capturando Dados 📥
- Path Params:
/id/123(Identificação). - Query Params:
?q=busca(Filtro). - Body: Enviando JSON (Criação/Update).
5. Respostas de Qualidade 📤
- Nunca esqueça o Status Code!
- Sucesso: 200, 201, 204.
- Erro: 400, 401, 404, 500.
6. Injeção de Dependência 💉
- Receber serviços prontos.
- Facilita testar o Controller "isolado".
7. Prática: O Primeiro Endpoint 💻
- Mapeando um
GET /ping. - Retornando um
pongem JSON. - Testando no Insomnia/Postman.
Desafio: Params vs Query ⚡
Se você quer listar todos os alunos de uma sala com o nome "Pedro", qual tipo de parâmetro você usaria para o nome?
Resumo ✅
- Controllers são a porta de entrada.
- Devem ser leves e objetivos.
- Capturam dados e retornam status/JSON.
- Seguem as rotas definidas.
Próxima Aula: Regras de Negócio! 🧠
Services e Validações
- Onde o cálculo acontece.
- Isolando o código do "mundo externo".
Dúvidas? ⚙️
Aula 06 - Services e Regras de Negócio 🧠
O Cérebro da Aplicação
Agenda 📅
- Por que separar as coisas?
- Responsabilidades do Service
- O Fluxo: Controller -> Service
- Tratamento de Erros Profissional
- DTOs: Protegendo os Dados
- Service vs ViewModel (Mobile)
1. O Problema: "Controller Gordo" 🍔
- Lógica de negócio misturada com HTTP.
- Código impossível de reutilizar.
- Difícil de testar.
2. A Solução: Layered Architecture 🧱
- Controller: Trata o transporte (HTTP).
- Service: Trata a regra (O QUE fazer).
3. O que vai no Service? ⚖️
- Validações complexas.
- Cálculos de valores.
- Envio de e-mails/notificações.
- Integração com repositórios.
4. Tratamento de Erros ⚠️
- O Service Lança (Throws).
- O Controller Captura (Catches).
// Service
if (!saldo) throw new Error("Saldo Insuficiente");
// Controller
try { ... } catch (e) { res.status(400)... }
5. DTOs: Filtrando a Saída 📦
- Nunca envie "tudo" do banco para o cliente.
- Proteja campos sensíveis (Ex:
senha_hash). - Melhore a performance (menos dados trafegados).
6. Service vs ViewModel 🆚
- No Backend: Service é o cérebro.
- No Mobile/Front: ViewModel é o cérebro.
- Ambos servem para "limpar" a camada de visualização.
7. Prática: Validando um Cadastro 💻
- Verificando se o e-mail é válido.
- Verificando se o usuário já existe.
- Lançando erros específicos.
Desafio: Onde colocar? ⚡
Se uma regra diz: "Usuários VIP ganham 20% de desconto", essa regra deve ficar no Controller ou no Service?
Resumo ✅
- Controllers recebem, Services processam.
- Mantenha seus Controllers "finos" (Slim Controllers).
- Centralize as regras para facilitar a manutenção.
- DTOs são as fronteiras dos dados.
Próxima Aula: Onde os dados vivem! 🗄️
Repositories e Banco de Dados
- PostgreSQL e SQL básico.
- Camada de persistência.
Dúvidas? 🧠
Aula 07 - Repositories e Banco de Dados 🗄️
Onde a informação descansa
Agenda 📅
- Por que Bancos de Dados?
- PostgreSQL: O Robusto
- SQL Básico (SELECT, INSERT...)
- Relacionamentos (1:N, N:N)
- Camada de Persistence
- O Padrão Repository
1. Persistência de Dados 💾
- Sem banco, o servidor esquece tudo ao reiniciar.
- Precisamos de segurança e integridade.
- Estritamente Tipado: O banco garante o formato.
2. Por que PostgreSQL? 🐘
- Código Aberto (Open Source).
- Extremamente confiável (ACID).
- Suporta dados complexos (JSONB).
3. SQL: A Linguagem Universal 🗣️
- DDL: Define a estrutura (Tabelas).
- DML: Manipula os dados (Linhas).
4. O Coração: Relacionamentos 🔗
- 1:N: Um cliente, muitos pedidos.
- N:N: Muitos alunos, muitos cursos.
- Foreign Key: A âncora que liga tudo.
5. Camada de Persistence 🧱
- O código que conversa com o driver do banco.
- Onde as queries são traduzidas para o código.
6. Padrão Repository 📥
- "Não me diga como, diga O QUE você quer".
- Isola o SQL da regra de negócio.
7. Migrations 📜
- Controle de versão para o Banco.
- Permite "voltar no tempo" se algo quebrar.
- Mantém o time em sincronia.
Desafio SQL ⚡
Qual comando você usaria para mudar o preço de todos os produtos da categoria 'Games' para 99.90?
Resumo ✅
- Bancos de dados dão memória ao sistema.
- PostgreSQL é o padrão da indústria.
- SQL é habilidade obrigatória para backend.
- Repository Pattern traz flexibilidade.
Próxima Aula: Integridade! ✅
Validação e Boas Práticas
- Garantindo que dados "sujos" não entrem no banco.
- Tratamento de exceções de banco.
Dúvidas? 🗄️
Aula 08 - Boas Práticas e Validação ✅
Qualidade e Segurança no Backend
Agenda 📅
- Por que Validar Tudo?
- Validação vs Sanitização
- Schema Validation (Ex: Zod)
- Clean Code (Código Limpo)
- Tratamento de Erros Profissional
- Middlewares Globais
1. Regra de Ouro: Desconfiança 🛡️
- O cliente é o "lado perigoso" da aplicação.
- Validações evitam dados corrompidos.
- Defesa em Profundidade: Garanta a regra no banco E no código.
2. Validar vs Sanitizar 🧼
- Validar: Checar (Idade > 18?).
- Sanitizar: Limpar (Remover
<script>).
3. Schema Validation 📐
- Crie "moldes" para seus dados.
- Validação centralizada e reutilizável.
4. O Backend Elegante (Clean Code) ✨
- DRY: Don't Repeat Yourself (Não repita lógica).
- KISS: Keep It Simple, Stupid (Mantenha o simples).
- Nomes de funções que explicam o que está acontecendo.
5. Tratamento de Erros 🚨
- Controller trata o fluxo, não o detalhe técnico.
- Try/Catch Global: Evite crashes.
- Mensagens amigáveis para o cliente.
6. Logs vs Mensagens 📜
- Terminal/Log: Detalhe técnico completo.
- Cliente (JSON): Apenas o que ele precisa saber.
"Ocorreu um erro interno" (Cliente) ✅ "Query failed at line 42 due to NULL constraint" (Logs) ✅
7. Prática: O Schema Perfeito 💻
- Validando um produto complexo.
- Tratando erros de tipo (String no lugar de Number).
Desafio: Limpeza ⚡
Se você recebe um texto de um post com muitos espaços em branco no final, você deve Validar ou Sanitizar?
Resumo ✅
- Backend robusto exige validação rigorosa.
- Limpe os dados antes de salvar (Sanitize).
- Middleware Global centraliza a gestão de falhas.
- Código limpo economiza meses de manutenção.
Próxima Aula: Módulo 3! 🔐
Segurança e Autenticação
- Quem é você? (Authentication).
- O que você pode fazer? (Authorization).
Dúvidas? ✅
Aula 09 - Segurança e Autenticação com JWT 🔐
Portas trancadas e Crachás Digitais
Agenda 📅
- Autenticação vs Autorização
- O Fim das Sessões (Stateful)
- O que é JWT?
- Estrutura: Header, Payload, Signature
- Fluxo de Login completo
- Melhores Práticas de Segurança
1. Quem é Você? (Autenticação) 🚦
- Validar a identidade do usuário.
- Login e Senha.
- Autorização: O que você PODE fazer? (Níveis de acesso).
2. Por que JWT? 🤔
- Abordagem Stateless (Sem estado).
- O servidor não guarda sessão na memória (escalável!).
- Perfeito para Microserviços e Mobile.
3. Estrutura do Token 🎫
- Header: Algoritmo (ex: HS256).
- Payload: Os dados (id, role, nome).
- Signature: O lacre de segurança.
4. O Coração do JWT: A Assinatura 🖋️
- Usa uma
SECRET_KEYno servidor. - Garante que o token não foi "hackeado" ou alterado.
5. Fluxo de Login 🌊
- Envia credenciais -> 2. Servidor valida -> 3. Gera JWT -> 4. Frontend guarda o Token -> 5. Envia no Header em cada requisição.
6. Segurança em Mobile 📱
- Nunca guarde em arquivos de texto!
- Use EncryptedSharedPreferences (Android) ou Keychain (iOS).
7. Melhores Práticas 🏆
- Use chaves secretas longas e seguras.
- Defina tempo de expiração (
expiresIn). - Protocolo HTTPS é obrigatório!
Desafio de Segurança ⚡
O Payload do JWT é criptografado ou apenas codificado? Posso guardar a senha do usuário lá?
Resumo ✅
- JWT permite autenticação rápida e escalável.
- Header + Payload + Signature.
- Stateless = Servidor mais leve.
Próxima Aula: Controle de Acesso 🛡️
Quem manda aqui? (RBAC)
- Middlewares de autorização.
- Protegendo rotas por nível de usuário.
Dúvidas? 🔐
Aula 10 - Controle de Acesso (RBAC) 🛡️
Hierarquia e Segurança em Camadas
Agenda 📅
- O que é RBAC? (Roles)
- Autenticação vs Autorização
- O Fluxo do Middleware
- Erros 401 vs 403
- Protegendo rotas na prática
- Hierarquia de Perfis
1. Role-Based Access Control 👑
- Permissões ligadas a Perfis (Roles).
- Ex: ADMIN, EDITOR, VIEWER.
- Facilita a gestão de milhares de usuários.
2. A Cancela (Middleware) 🚧
- O middleware checa se o usuário tem a "chave" certa.
- Se não tiver -> 403 Forbidden.
- Se tiver ->
next().
3. O Fluxo de Segurança 🌊
graph LR
Req[Request] --> Auth[Autenticação]
Auth --> |OK| Role[Autorização]
Role --> |OK| Controller[Recurso Final]
4. 401 vs 403: Não confunda! ❌
- 401 (Unauthorized): "Quem é você?". Token inválido ou ausente.
- 403 (Forbidden): "Eu sei quem você é, mas não deixo entrar". Falta de permissão.
5. Implementação Dinâmica 🔒
// Middleware genérico
router.delete('/usuario/:id',
autenticar,
autorizar(['ADMIN']),
userController.remover
);
6. Hierarquia de Acesso 🏛️
- Um Admin deve poder acessar rotas de User?
- Design de sistema: Roles "Pai" e "Filho".
7. Melhores Práticas 🏆
- Centralize a lógica em Middlewares.
- Nunca exponha permissões sensíveis no frontend (segurança do lado do servidor).
Desafio: Segurança ⚡
Em um sistema escolar, o Diretor e o Professor podem ver notas. O Aluno só vê as dele. Como você configuraria a Role da rota GET /notas?
Resumo ✅
- RBAC organiza permissões por grupos.
- Middlewares são os guardiões das rotas.
- Diferenciar 401 de 403 é vital para Debug.
Próxima Aula: Segurança Avançada 🏗️
Session vs Token e Refresh Tokens
- O que fazer quando o token expira?
- Protegendo contra ataques comuns (XSS, CSRF).
Dúvidas? 🛡️
Aula 11 - Refresh Token e Segurança Avançada 🏗️
Blindando sua API contra o mundo
Agenda 📅
- O Problema do Token Curto ⏰
- Refresh Tokens (O que são?)
- CORS: Origens e Destinos
- Helmet: Headers de Aço
- Rate Limit: Contra Brute Force
- Ataques Comuns (XSS, Injection)
1. Por que Tokens Expiram? ⏰
- Segurança! Se roubarem o token, ele dura pouco.
- Problema: O usuário odeia fazer login toda hora.
2. Refresh Token 🔁
- Um token de longa duração (7 dias+).
- Serve apenas para trocar por um novo Access Token.
- Deve ser invalidado se o usuário deslogar.
3. CORS: Cross-Origin Resource Sharing 🌍
- "Quem pode me chamar?".
- Resolvido via Headers no Servidor.
- Nunca use
origin: '*'em ambientes reais!
4. Helmet: Proteção de Headers 🪖
- Remove o
X-Powered-By(não diz que é Express). - Adiciona proteção contra Clickjacking e XSS.
5. Rate Limiting 🔨
- 5 tentativas de login por minuto? Sim.
- Evita que robôs tentem descobrir senhas via "força bruta".
6. Onde salvar os Tokens? 🛡️
- Frontend: LocalStorage? Seguro?
- Melhor Prática: Cookies
HttpOnly+Secure.
7. Melhores Práticas de Segurança 🏆
- Use HTTPS sempre.
- Valide TODAS as entradas do usuário.
- Mantenha as bibliotecas atualizadas.
Desafio de Segurança ⚡
Qual a diferença entre 401 e 403 no contexto de Refresh Tokens? Se eu recebo 401, eu tento o refresh ou deslogo o usuário?
Resumo ✅
- Refresh Token equilibra UX e Segurança.
- CORS e Helmet são as portas do seu castelo.
- Proteja-se contra robôs com Rate Limit.
Próximo Módulo: Front-End Moderno 🎨
Saindo das APIs e indo para a Web!
- Introdução ao React/Vite.
- Consumindo nossas APIs no navegador.
Dúvidas? 🏗️
Aula 12 - Introdução ao React ⚛️
O Poder dos Componentes Modernos
Agenda 📅
- O que são SPAs?
- Por que React?
- Vite: A Ferramenta Rápida
- JSX: JS + HTML
- Componentes e LEGO
- Props: O Coração Dinâmico
1. Single Page Applications (SPA) 📄
- O site que nunca recarrega.
- Navegação fluida e instantânea.
- Ex: Gmail, Facebook, Spotify Web.
2. Por que o React venceu? ⚔️
- Componentização (Foco no Reuso).
- Virtual DOM (Foco na Performance).
- Gigantesco Ecossistema (Foco no Emprego).
3. Vite: O Novo Padrão ⚡
- Inicia o projeto em segundos.
- Feedback instantâneo durante o código.
4. JSX: A Mistura Perfeita 🧪
- Parece HTML, mas tem o poder do Javascript.
5. Componentes = LEGO 🧩
- Pequenas partes isoladas.
- Facilita testes e trabalho em equipe.
6. Props: Passando o Bastão 🎁
- Permite que componentes recebam dados do "pai".
- Torna componentes genéricos e reutilizáveis.
Resumo ✅
- SPA torna a Web parecida com Apps.
- React organiza sua UI em componentes.
- Vite é seu melhor amigo no desenvolvimento.
Próxima Aula: Dinâmica e Estado 🎣
O que acontece quando o usuário clica?
- Hooks:
useState. - Reatividade na prática.
Dúvidas? ⚛️
Aula 13 - Estado e Hooks 🎣
Tornando seu App Interativo
Agenda 📅
- O que é o Estado (State)?
- Hook
useState - Lidando com Cliques e Eventos
- Inputs Controlados
- Imutabilidade e Arrays
1. O Problema da Estática 🧱
- Variáveis comuns mudam nos bastidores...
- ...mas a tela continua a mesma!
- O React precisa de um sinal para re-desenhar.
2. useState: O Motor de Mudança 🚀
- cont: O valor atual.
- setCont: A função que atualiza.
- 0: O ponto de partida.
3. Eventos no React ⚡
onClick={funcao}onChange={(e) => ...}- Sempre em CamelCase!
4. Inputs Controlados ⌨️
- O React é quem manda no valor do input.
value={estado}+onChange.- Facilita validação e limpeza de campos.
5. Imutabilidade (Muito Importante!) 💎
- Nunca altere o estado original:
lista.push(x)❌ - Sempre crie uma cópia nova:
setLista([...lista, x])✅
6. Fluxo de Dados 🌊
- O estado flui do Pai para o Filho via Props.
- Se o estado do Pai muda, todo mundo abaixo dele atualiza.
Desafio de Estado ⚡
Se eu tenho um botão que soma +1 ao contador, o que acontece com a interface se eu esquecer de importar o useState e usar uma variável global let contador = 0?
Resumo ✅
useStatetraz vida aos componentes.- Mudança de estado = Re-renderização.
- Use sempre funções disparadoras (
set...).
Próxima Aula: Efeitos e APIs 🌐
Buscando dados no mundo real!
- Hook:
useEffect. - Consumindo nossa API Backend.
Dúvidas? 🎣
Aula 14 - Efeitos e APIs 🌐
Conectando seu App ao Mundo Real
Agenda 📅
- O que são Side Effects?
- Hook
useEffect - O Array de Dependências
- Buscando dados com
fetch - Estados de Carregamento e Erro
1. Além da Interface 🧪
- Efeitos colaterais são ações que tocam o mundo externo ao componente.
- Ex: Buscar usuários, mudar o título da aba, iniciar um cronômetro.
2. useState vs useEffect 🥊
- useState: Para dados que o usuário vê mudando.
- useEffect: Para ações que o componente faz "sozinho".
3. Os 3 Momentos do useEffect 🕒
- Montagem: Quando o componente nasce.
- Atualização: Quando um dado monitorado muda.
- Desmontagem: Quando o componente morre (Cleanup).
4. O Array de Dependências [] 🗃️
[]-> Roda só uma vez.[cont]-> Roda sempre quecontmudar.Sem array-> Roda em toda atualização (Perigo!).
5. Chamadas de API (Fetch) 📨
useEffect(() => {
fetch("https://api...")
.then(res => res.json())
.then(data => setData(data));
}, []);
6. UX: Estados de Rede 🛡️
- Loading: Mostre um Spinner enquanto espera.
- Error: Avise se a internet caiu ou o usuário não existe.
- Empty: Diga se não há resultados.
Desafio de Efeito ⚡
Se você colocar um alert("Olá") dentro de um useEffect sem o array [], quantas vezes o alerta vai aparecer se o usuário ficar digitando em um campo de texto que atualiza o estado?
Resumo ✅
useEffectorganiza as ações assíncronas.- Controle quando rodar via array de dependências.
- Trate sempre o carregamento e erros para uma boa UX.
Próxima Aula: Navegação 🚦
Multi-páginas com React Router!
/home,/perfil,/contato.- Links e Navegação Programática.
Dúvidas? 🌐
Aula 15 - React Router 🚦
Criando Apps Multi-Página
Agenda 📅
- O que são SPAs?
- Multi-páginas (Simuladas)
- Componentes de Rota
- Navegação (
LinkeuseNavigate) - Parâmetros dinâmicos (
:id)
1. O Mundo do SPA ⚛️
- O site é uma única página HTML.
- O Javascript "troca" a tela sem recarregar.
- UX rápida e fluida.
2. React Router Dom ⚙️
- A biblioteca padrão para web.
- Permite que a URL combine com o que aparece na tela.
3. A Estrutura Básica 🏗️
- BrowserRouter: O container principal.
- Routes: O seletor de rotas.
- Route: Define o caminho (
path) e o componente (element).
4. Navegando sem Recarregar! 🏃♂️
- Use
<Link to="/contato"> - NUNCA use
<a href="...">para rotas internas.
5. Navegação Programática 🚀
- Ideal para redirecionar após ações (Login, Clique em Card).
6. Rotas Dinâmicas (URL Params) 🆔
path="/perfil/:username"- Hook
useParams()captura o valor. - Uma única página que se adapta a mil perfis.
7. Página 404 (Not Found) 👻
path="*"- Garante que o usuário nunca caia em uma tela em branco.
Desafio de Roteamento ⚡
Se eu digitar www.meusite.com/asdfg e não tiver uma rota configurada para isso, o que o usuário vai ver se eu NÃO colocar uma rota com o path="*"?
Resumo ✅
- Roteamento traz a sensação de um site real.
- Hooks
useNavigateeuseParamssão essenciais. - SPAs são o padrão da indústria moderna.
Próxima Aula: O Grande Final 🏆
Projeto Integrado: Backend + Frontend!
- Conectando nossa API Node ao site React.
- O Projeto Final do Curso!
Dúvidas? 🚦
Aula 16 - Projeto Final e Conclusão �
De aluno a Desenvolvedor Full-Stack
Agenda 📅
- O Desafio Final 🔗
- Requisitos Técnicos
- Portfólio no GitHub
- Onde continuar estudando?
- Mensagem de Encerramento
1. O Desafio Final 🚀
Você deve entregar um projeto integrado contendo: - Frontend: SPA em React com rotas. - Backend: API segura em Node.js. - Integração: Conexão real entre os dois. - Design: CSS moderno e responsivo.
2. Sugestões de Temas 💡
- Gerenciador de Tarefas �
- Mini E-commerce 🛒
- Rede Social Simplificada 💬
- Dashboard de Monitoramento 📊
3. O README de Elite ✨
- Prints ou Vídeos do site funcionando.
- Lista detalhada de tecnologias.
- Guia: "Como rodar o Projeto".
4. Onde ir agora? 📚
- TypeScript: Segurança de tipos.
- Bancos SQL: Postgres e MySQL.
- Next.js: O rei do mercado React.
- Docker: Infraestrutura moderna.
5. Soft Skills 🤝
- Não é só saber programar!
- Trabalho em equipe.
- Resolução de problemas reais.
6. O Mercado Full-Stack 📈
- Demanda altíssima por devs completos.
- Salários excelentes.
- Dashboards e Sistemas Web movem o mundo!
7. Mensagem Final 🌟
"Programar é a arte de criar soluções onde antes só havia problemas."
- Você construiu a base sólida.
- O código é sua ferramenta de transformação.
Parabéns pela Jornada! 🎓🚀
Vá e construa o futuro da Web.
Dúvidas Finais? 🤔
Configuração
Ambientes de Desenvolvimento 🛠️
Guias para configurar seu computador para o desenvolvimento mobile.
-
Android --- Instalação do Android Studio, SDK e emuladores.
-
iOS (Opcional/Referência) --- Configuração básica de Xcode e ferramentas Mac.
-
Ferramentas de Apoio --- Git, Terminais e Postman/Insomnia para testes de API.
Setup 01: Android Studio 🤖
O Android Studio é a IDE oficial para o desenvolvimento Android.
1. Requisitos de Sistema
- RAM: Mínimo 8GB (Sugerido 16GB+).
- Espaço: Mínimo 10GB para IDE + SDKs.
- Processador: Intel Core i5 ou equivalente.
2. Instalação
- Acesse o site oficial: developer.android.com/studio.
- Baixe a versão mais recente para o seu Sistema Operacional.
- Execute o instalador e escolha a opção "Standard" na configuração inicial.
3. Configurando o SDK
- Após a instalação, vá em Settings > Languages & Frameworks > Android SDK.
- Certifique-se de que a versão mais recente do Android (estável) esteja instalada.
- Na aba SDK Tools, instale o "Android Emulator" e o "Intel x86 Emulator Accelerator (HAXM)" se estiver no Windows com Intel.
4. Criando um Emulador (AVD)
- Abra o Device Manager.
- Clique em Create Device.
- Escolha um dispositivo (ex: Pixel 7).
- Selecione uma imagem de sistema (ex: Level 34 - Android 14).
- Finalize e clique no "Play" para iniciar o celular virtual.
5. Solução de Problemas ⚠️
- VT-x is disabled: Você precisa habilitar a virtualização na BIOS do seu computador.
- Studio muito lento: Adicione a pasta do projeto e as pastas do Android SDK nas exclusões do seu Antivírus.
Setup 02: Xcode (iOS Foundation) 🍎
O Xcode é a ferramenta necessária para compilar e testar apps iOS.
[!IMPORTANT] O Xcode requer um computador Mac (macOS).
1. Instalação
- Abra a App Store no seu Mac.
- Pesquise por Xcode.
- Clique em Obter/Instalar.
- Após o download, abra o Xcode para carregar os componentes adicionais do macOS.
2. Configurando Simuladores
- Vá em Settings > Platforms.
- Verifique se o componente "iOS" está baixado.
- Se não estiver, clique em "GET" para baixar a versão mais estável.
3. Comandos de Linha (CLI)
Para que ferramentas de automação funcionem, você precisa instalar os Command Line Tools:
4. Opcional: CocoaPods
Muitos projetos iOS antigos ainda usam CocoaPods para dependências:
5. Solução de Problemas ⚠️
- Espaço em Disco: O Xcode é muito grande. Garanta pelo menos 40GB de espaço livre para ele e os simuladores.
- Build Lento: Use simuladores de modelos mais simples (ex: iPhone SE) para poupar memória RAM se necessário.
Sobre
Sobre o Curso
🎓 Desenvolvimento Web com PHP e Laravel
Este curso foi projetado para capacitar o aluno a desenvolver aplicações web modernas utilizando PHP 8.x e o framework Laravel, aplicando arquitetura MVC, boas práticas de desenvolvimento, segurança e APIs REST.
🎯 Objetivos do Curso
-
:material-php: PHP Moderno (8.x) --- Dominar as novas funcionalidades do PHP, tipagem forte, atributos e gerenciamento de dependências com Composer.
-
Framework Laravel 10+ --- Aprender o ecossistema Laravel, desde rotas e controllers até o Eloquent ORM e Blade Template Engine.
-
Segurança e APIs --- Implementar autenticação robusta, proteção contra ataques comuns (CSRF, XSS) e desenvolver APIs REST profissionais.
-
DevOps e Deploy --- Configurar ambientes com Docker, automação de testes e realizar o deploy de aplicações em ambientes de produção.
📚 Módulos do Curso
Módulo 1 – Fundamentos e PHP Moderno
- Evolução do PHP e PSRs
- POO e Namespaces
- Instalação e Estrutura do Laravel
- Sistema de Rotas e Controllers
Módulo 2 – Core e Banco de Dados
- Views com Blade e Layouts
- Migrations, Seeders e Factories
- Relacionamentos Eloquent (1:1, 1:N, N:N)
- CRUD Completo e Validação
Módulo 3 – Segurança e APIs
- Autenticação (Breeze/Jetstream)
- Policies e Gates (Controle de Acesso)
- API Resources e Versionamento
- Testes Automatizados (TDD)
Módulo 4 – Ecossistema Avançado
- Storage e Upload de Arquivos
- Filas (Jobs), Eventos e Listeners
- Docker para Desenvolvimento
- Deploy em VPS/Cloud
🛠️ Metodologia
Foco prático orientado por mini-projetos a cada aula. Ao final, o aluno desenvolverá um sistema completo (como um Kanban ou E-commerce) para compor seu portfólio profissional.
Pronto para se tornar um desenvolvedor Laravel? Começar Agora
Roadmap do Projeto: PHP e Laravel 🚀
Evolução do material didático e metas de aprendizado.
✅ Fase 1: Planejamento (Concluído)
- [x] Syllabus de 16 Aulas (PHP 8.x + Laravel 10)
- [x] Estrutura de diretórios e padrões visuais
- [x] Configuração MkDocs Material (Teal/Amber)
✅ Fase 2: Conteúdo Base (Concluído)
- [x] 16 Aulas em Markdown
- [x] 16 Quizzes interativos
- [x] 16 Listas de Exercícios
- [x] 16 Conjuntos de Slides (RevealJS)
✅ Fase 3: Projetos e UX (Em Andamento)
- [ ] Implementação detalhada dos 16 mini-projetos
- [ ] Diagramas Mermaid de fluxo e arquitetura
- [ ] Exemplos TermynalJS de comandos Artisan
🚀 Fase 4: Lançamento e Produção
- [ ] Configuração de CI/CD (GitHub Actions)
- [ ] Otimização para dispositivos móveis
- [ ] Versionamento com Mike
Status Atual: Em Refatoração Última Atualização: 21/02/2026
Materiais Complementares 📚
Recursos adicionais para apoiar sua jornada no desenvolvimento com PHP e Laravel.
-
Slides --- Material visual das 16 aulas com exemplos de código.
-
Exercícios --- Listas graduais do básico ao desafio.
-
Quizzes --- Validação de conhecimento imediata.
-
Projetos --- Guia de implementação dos mini-projetos e projeto final.
-
Documentação Laravel --- Referência oficial do framework mais amado do PHP.
Versão para Impressão
Esta página foi gerada automaticamente para impressão.