Artisan
Comandos Comuns
php artisan serveIniciar servidor de desenvolvimento
php artisan make:model Name -mCriar model com migration
php artisan make:controller NameControllerCriar classe controller
php artisan make:middleware NameCriar classe middleware
php artisan migrateExecutar migrations pendentes
php artisan migrate:rollbackReverter último lote de migration
php artisan db:seedExecutar seeders do banco de dados
php artisan tinkerREPL interativo para a aplicação
php artisan route:listListar todas as rotas registradas
php artisan cache:clearLimpar o cache da aplicação
php artisan config:clearLimpar config em cache
php artisan queue:workIniciar processamento de jobs na fila
Roteamento
Rotas Básicas
Route::get('/users', [UserController::class, 'index']); Route::post('/users', [UserController::class, 'store']); Route::put('/users/{id}', [UserController::class, 'update']); Route::delete('/users/{id}', [UserController::class, 'destroy']);
Parâmetros e Grupos de Rota
Route::get('/user/{id}', function (int $id) { return User::findOrFail($id); }); Route::prefix('api')->middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'show']); });
Recursos de Rota
->name('route.name')Rota nomeada para geração de URL
->where('id', '[0-9]+')Restrição regex no parâmetro
Route::resource()Rotas de recurso RESTful (7 rotas)
Route::apiResource()Recurso de API (sem views create/edit)
Route::fallback()Captura rotas sem correspondência
Controllers
Resource Controller
class PostController extends Controller { public function index() { return view('posts.index', ['posts' => Post::all()]); } public function store(Request $request) { $validated = $request->validate(['title' => 'required|max:255']); Post::create($validated); return redirect()->route('posts.index'); } }
Métodos de Resource
index()GET /resource -- listar todos
create()GET /resource/create -- exibir formulário
store()POST /resource -- salvar novo
show($id)GET /resource/{id} -- exibir um
edit($id)GET /resource/{id}/edit -- formulário de edição
update($id)PUT /resource/{id} -- atualizar
destroy($id)DELETE /resource/{id} -- remover
Templates Blade
Layout e Seções
{{-- layouts/app.blade.php --}} @yield('content') {{-- pages/home.blade.php --}} @extends('layouts.app') @section('content')

Home

@endsection
Diretivas
{{ $var }}Echo com escape HTML
{!! $html !!}Echo bruto (sem escape)
@if / @elseif / @elseBlocos condicionais
@foreach ($items as $item)Iterar sobre coleção
@forelse / @emptyLoop com fallback para vazio
@include('partial')Incluir outra view Blade
@component / @slotComponentes Blade reutilizáveis
@csrfCampo hidden com token CSRF
@auth / @guestVerificar status de autenticação
@error('field')Exibir erro de validação
Eloquent ORM
Básico de Model
class Post extends Model { protected $fillable = ['title', 'body', 'user_id']; public function user() { return $this->belongsTo(User::class); } }
Consultando
Post::all(); // all records Post::find(1); // by primary key Post::where('status', 'published')->get(); Post::where('views', '>', 100)->orderBy('created_at', 'desc')->first();
Operações CRUD
$post = Post::create(['title' => 'New', 'body' => '...']); $post->update(['title' => 'Updated']); $post->delete(); Post::destroy([1, 2, 3]); // delete by IDs
Relacionamentos
hasOneUm-para-um (User -> Phone)
hasManyUm-para-muitos (Post -> Comments)
belongsToInverso de hasOne/hasMany
belongsToManyMuitos-para-muitos com tabela pivot
hasManyThroughHas-many via model intermediário
Migrations
Criando Tabelas
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('title'); $table->text('body')->nullable(); $table->timestamps(); });
Tipos de Coluna
$table->id()Chave primária BIGINT auto-incremento
$table->string('col', 100)VARCHAR com comprimento opcional
$table->text('col')Coluna TEXT
$table->integer('col')Coluna INTEGER
$table->boolean('col')Coluna BOOLEAN
$table->json('col')Coluna JSON
$table->timestamp('col')Coluna TIMESTAMP
$table->timestamps()created_at e updated_at
$table->softDeletes()deleted_at para exclusão suave
Middleware
Middleware Personalizado
class EnsureAdmin { public function handle(Request $request, Closure $next) { if (! $request->user()?->is_admin) { abort(403); } return $next($request); } }
Registrando e Usando
// bootstrap/app.php ->withMiddleware(function (Middleware $middleware) { $middleware->alias(['admin' => EnsureAdmin::class]); }) // In routes Route::get('/admin', fn() => '...')->middleware('admin');
Middleware Integrado
authExige autenticação
guestRedireciona se autenticado
throttle:60,1Limite de taxa (60 req/min)
verifiedExige verificação de e-mail
signedValida URL assinada
Autenticação
Helpers de Auth
Auth::check(); // is user logged in? Auth::user(); // current User model Auth::id(); // current user ID Auth::attempt(['email' => $e, 'password' => $p]); Auth::logout();
Starter Kits
Laravel BreezeScaffolding mínimo de auth (Blade ou Inertia)
Laravel JetstreamCompleto (times, 2FA, tokens de API)
SanctumAutenticação por token para SPA / mobile
PassportImplementação completa de servidor OAuth2
Protegendo Rotas
Route::middleware('auth')->group(function () { Route::get('/dashboard', [DashController::class, 'index']); });
Validação
Validação no Controller
$validated = $request->validate([ 'title' => 'required|string|max:255', 'email' => 'required|email|unique:users', 'age' => 'nullable|integer|min:0', ]);
Form Request
class StorePostRequest extends FormRequest { public function rules(): array { return [ 'title' => 'required|max:255', 'body' => 'required|min:10', ]; } }
Regras Comuns
requiredCampo obrigatório e não vazio
string | integer | booleanValidação de tipo
min:N | max:NComprimento ou valor mínimo/máximo
emailFormato de e-mail válido
unique:table,columnDeve ser único na tabela do banco
exists:table,columnDeve existir na tabela do banco
in:a,b,cDeve ser um dos valores listados
confirmedRequer campo _confirmation correspondente
date | after:dateValidação de data
Padrões Comuns
Resposta de API
return response()->json(['data' => $users], 200); return response()->json(['error' => 'Not found'], 404);
Ambiente e Configuração
env('APP_KEY'); // read .env value config('app.name'); // read config value config(['app.debug' => true]); // set at runtime
Helpers Úteis
route('name', $params)Gerar URL para rota nomeada
redirect()->route('name')Redirecionar para rota nomeada
back()->withErrors()Redirecionar de volta com erros de validação
abort(404)Lançar exceção HTTP
collect($array)Criar uma Collection a partir de array
now()Datetime Carbon atual
cache()->remember()Armazenar valor em cache com TTL