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() |
2. Instalando o Laravel
# Create a new project
composer create-project laravel/laravel myblog
# Start the development server
cd myblog
php artisan serve
# Open http://localhost:8000
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:
$router->add('GET', '/posts', [$ctrl, 'index']);
$router->add('GET', '/posts/{id}', [$ctrl, 'show']);
(2) Versão do Laravel:
// 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:
// ~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
// 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 foreach ($posts as $post): ?>
<h2><?= htmlspecialchars($post['title']) ?></h2>
<?php endforeach; ?>
▶ Exemplo: Modelo de lista de publicações do Blade Post
{{-- 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
Características da lâmina:
{{ $var }}aplica automaticamentehtmlspecialchars(proteção contra XSS)@if @else @endif/@foreach @endforeach— sintaxe mais clara@extends/@section— herança de modelos@csrf— gera automaticamente um campo oculto com um token CSRF
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:
# Create a migration file
php artisan make:migration create_posts_table
# Run migrations
php artisan migrate
# Rollback
php artisan migrate:rollback
<?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');
}
};
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:
// Password verification + Session management + Logout + Permission checks = ~50 lines
(2) Versão do Laravel:
# 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
// 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
# 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
// 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']);
<?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
✅ 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
- Os frameworks não aumentam a complexidade — eles organizam os recursos já existentes
- Laravel:
Route::get()roteamento →EloquentORM →Blademodelos →ArtisanCLI Post::all()substitui oSELECT * FROM postsescrito à mão@foreachsubstitui<?php foreach ?>- Os geradores de linha de comando
php artisanaumentam a produtividade - Você já domina os conceitos básicos do MVC — o Laravel simplesmente torna o MVC mais elegante
- Documentação do Laravel: https://laravel.com/docs
- Comunidade Laravel: https://laracasts.com
📝 Exercícios
- Instale o Laravel, crie um novo projeto e execute o
php artisan servepara ver a página de boas-vindas. - Use
php artisan make:model Post -apara criar um recurso de postagem completo. Escreva uma migração para criar a tabela. Insira alguns dados de teste usando o Tinker. - 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
echoe 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! 🚀



