Próximos passos: Introdução ao Laravel

Parabéns por ter concluído as 35 lições sobre os fundamentos do PHP! Você criou seu próprio roteador, controladores, visualizações e modelos — isso não é, essencialmente, um mini-framework? O Laravel faz tudo isso de uma forma 10 vezes mais elegante. Esta lição é a sua ponte entre o PHP escrito manualmente e um framework moderno.

1. Por que precisamos de uma estrutura?

O sistema de blog que você desenvolveu em PHP já enfrentou os seguintes desafios:

Seu desafio Solução estruturada
A reescrita de URLs com o .htaccess é um incômodo O roteamento integrado do Laravel: Route::get('/posts', ...)
Todas as páginas precisam de session_start + verificações de autenticação Middleware: ->middleware('auth')
O SQL escrito manualmente está sujeito a erros; é difícil mudar de banco de dados ORM Eloquent: Post::all()
Incluir manualmente todos os arquivos Carregamento automático do Composer
Proteção CSRF “faça você mesmo” em formulários @csrf — uma linha
Alterações manuais no banco de dados Migrações para controle de versão
Código de hash de senha repetido Hash::make(), Auth::attempt()
💡 Dica: Um framework não é um PHP mais complexo — é um PHP mais organizado. Cada recurso que você implementou manualmente tem um equivalente mais limpo no Laravel.


2. Instalando o Laravel

BASH
# Create a new project
composer create-project laravel/laravel myblog

# Start the development server
cd myblog
php artisan serve
# Open http://localhost:8000
TEXT
myblog/                          ← Laravel project
├── app/
│   ├── Models/                  ← Eloquent models
│   │   └── Post.php
│   └── Http/
│       └── Controllers/         ← Controllers
│           └── PostController.php
├── routes/
│   └── web.php                  ← Routes (core!)
├── resources/
│   └── views/                   ← Blade templates
│       └── posts/
├── database/
│   └── migrations/              ← Database migrations
├── .env                         ← Environment configuration
└── artisan                      ← CLI toolkit

3. Roteamento — Seu roteador personalizado x Laravel

(1) O que você construiu à mão:

PHP
$router->add('GET', '/posts', [$ctrl, 'index']);
$router->add('GET', '/posts/{id}', [$ctrl, 'show']);

(2) Versão do Laravel:

PHP
// routes/web.php
use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);

// Even cleaner: resource routing (one line generates 7 standard routes)
Route::resource('posts', PostController::class);

// List all routes
// php artisan route:list

4. ORM do Eloquent — Seu modelo criado manualmente x Laravel

(1) O que você construiu à mão:

PHP
// ~30 lines of CRUD code
public function getAll(): array { ... }
public function findById(int $id): ?array { ... }
public function create(...): int { ... }

(2) Versão do Laravel:

PHP
<?php
// app/Models/Post.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // That's it! Laravel automatically maps to the posts table
    protected $fillable = ['title', 'content', 'user_id'];
    
    // Relationship with users
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

// Usage (10 lines of hand-written code → 1 line)
$posts = Post::all();
$post = Post::find(1);
Post::create(['title' => 'Hello', 'content' => 'World', 'user_id' => 1]);
$post->update(['title' => 'New Title']);
$post->delete();
// Relationship query
echo $post->user->username;  // Automatically JOINs the users table
?>

5. Modelos do Blade — Sua visualização em PHP criada manualmente x Blade

(1) O que você construiu à mão:

PHP
<?php foreach ($posts as $post): ?>
    <h2><?= htmlspecialchars($post['title']) ?></h2>
<?php endforeach; ?>

▶ Exemplo: Modelo de lista de publicações do Blade Post

BLADE
{{-- resources/views/posts/index.blade.php --}}

@extends('layouts.app')

@section('content')
    <h2>All Posts</h2>
    
    @foreach ($posts as $post)
        <div class="post-card">
            <h2><a href="/posts/{{ $post->id }}">{{ $post->title }}</a></h2>
            <p>{{ Str::limit($post->content, 200) }}</p>
        </div>
    @endforeach
    
    {{-- Pagination links auto-generated! --}}
    {{ $posts->links() }}
@endsection
▶ Experimente

Características da lâmina:


6. Migrações — Gerenciamento da estrutura do banco de dados

Chega de executar SQL manualmente para criar tabelas. Defina a estrutura da sua tabela no código:

BASH
# Create a migration file
php artisan make:migration create_posts_table

# Run migrations
php artisan migrate

# Rollback
php artisan migrate:rollback
PHP
<?php
// database/migrations/xxx_create_posts_table.php

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->onDelete('cascade');
            $table->string('title');
            $table->text('content');
            $table->timestamps();  // created_at + updated_at auto-managed
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};
💡 Dica: Benefícios das migrações: (1) Controle de versão — o php artisan migrate:rollback reverte as alterações da mesma forma que o Git; (2) Colaboração em equipe — todos executam as mesmas migrações e obtêm a mesma estrutura de tabelas; (3) Tratamento automático de nomes de campos, tipos, índices e chaves estrangeiras.


7. Sistema de autenticação — 50 linhas escritas manualmente x 3 linhas no Laravel

(1) O que você construiu à mão:

PHP
// Password verification + Session management + Logout + Permission checks = ~50 lines

(2) Versão do Laravel:

BASH
# One command generates a complete auth system (login/register/password reset/email verification)
composer require laravel/breeze
php artisan breeze:install blade
php artisan migrate
npm install && npm run build
PHP
// Route protection
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware('auth');

// Get the current user
$user = auth()->user();
echo $user->posts;  // Auto relationship query

8. Artisan — Seu kit de ferramentas de CLI

BASH
# Create a controller
php artisan make:controller PostController

# Create a model (generates Migration + Factory + Seeder together)
php artisan make:model Post -a

# Database operations
php artisan migrate          # Run migrations
php artisan db:seed          # Seed test data
php artisan migrate:fresh --seed  # Reset database + seed

# Debugging
php artisan route:list       # List all routes
php artisan tinker           # Interactive PHP REPL (can directly operate on the database)

9. Sistema de blog do Laravel — A versão completa

▶ Exemplo: Controlador Laravel completo

PHP
<?php
// routes/web.php
use App\Http\Controllers\PostController;

Route::get('/', [PostController::class, 'index']);
Route::resource('posts', PostController::class)->middleware('auth');
Route::get('/register', [RegisteredUserController::class, 'create']);
Route::post('/register', [RegisteredUserController::class, 'store']);
▶ Experimente
PHP
<?php
// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function index()
    {
        $posts = Post::with('user')->latest()->paginate(10);
        return view('posts.index', compact('posts'));
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'title'   => 'required|max:200',
            'content' => 'required',
        ]);

        Post::create([
            ...$validated,
            'user_id' => auth()->id(),
        ]);

        return redirect('/posts')->with('success', 'Post published successfully!');
    }
}

Compare: Seu blog escrito manualmente usou cerca de 150 linhas para PostController. O Laravel usa cerca de 20 — e a versão do Laravel já vem com prevenção contra injeção de SQL, proteção contra CSRF, validação de formulários e paginação integradas.


10. Seu plano de estudos de PHP

TEXT
✅ You've completed:
   Fundamentals (variables, arrays, functions, loops, conditionals)
         ↓
   Web Interaction (forms, cookies, sessions, file uploads)     ← 36 lessons done
         ↓
   OOP (classes, inheritance, interfaces, traits, namespaces, Composer)
         ↓
   Database Operations (MySQL, PDO, transactions, security)
         ↓
   PHP 8 Modern Features (enums, match, constructor property promotion)
         ↓
🔜 Your next steps:
   
   1. Rewrite the blog system in Laravel (this week)
      — Internalize the framework mindset, experience the productivity leap
   
   2. Learn REST API development
      — JSON responses, frontend-backend separation
   
   3. Explore testing (PHPUnit/Pest)
      — Protect your code with automated tests
   
   4. Dive deeper:
      — Laravel ecosystem (Eloquent, Queues, Events, Notifications)
      — Design patterns (Repository, Service, Factory)
      — Performance optimization (Redis caching, N+1 query, Opcache)

❓ Perguntas Frequentes

P: Depois de concluir os fundamentos do PHP, preciso aprender Laravel imediatamente? R: Não há necessidade de pressa. Você já entende como o MVC funciona (porque você mesmo o construiu). Se aprender Laravel agora, terá aquele momento de revelação: “Ah! Então é assim tão simples”. Se pular a etapa de construí-lo por conta própria e passar direto para um framework, muitos princípios subjacentes continuarão confusos.

P: O PHP ainda tem futuro no mercado de trabalho? R: O WordPress é usado por 43% de todos os sites do mundo. O Laravel é um dos frameworks web mais populares. No Brasil, no Oriente Médio e em muitas outras regiões, há inúmeras vagas para profissionais de PHP. O PHP 8.x lança novas versões todos os anos — é rápido, possui um sistema de tipos maduro e um ecossistema rico. O PHP está mais vivo do que nunca.

P: Qual linguagem devo aprender agora? R: Você já sabe PHP (back-end) + HTML/CSS/JS (front-end) — você é um desenvolvedor full-stack! Aprofunde seus conhecimentos: bancos de dados SQL (JOINs, índices, otimização) → gerenciamento de servidores (Nginx, Linux, Docker) → JavaScript avançado (React, Vue).

📖 Resumo

📝 Exercícios

  1. Instale o Laravel, crie um novo projeto e execute o php artisan serve para ver a página de boas-vindas.
  2. Use php artisan make:model Post -a para criar um recurso de postagem completo. Escreva uma migração para criar a tabela. Insira alguns dados de teste usando o Tinker.
  3. Reescreva a página de lista de posts e a página de detalhes do post do seu sistema de blog usando o Laravel (modelos Blade + consultas Eloquent). Compare a experiência com a sua versão criada manualmente.

🎉 Parabéns por ter concluído as 36 lições do tutorial de PHP! Você começou sem saber nada sobre echo e terminou como um desenvolvedor capaz de criar aplicativos web completos em PHP, compreendendo a arquitetura MVC e dominando operações com bancos de dados e segurança. O mundo do PHP é vasto — WordPress, Laravel, Drupal e Symfony estão todos esperando por você. Continue assim! 🚀

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%