Introdução ao Laravel
Laravel é um framework PHP para desenvolvimento de aplicações web que oferece uma estrutura organizada e diversas ferramentas para trabalhar com rotas, banco de dados, filas, cache, validação, autenticação, testes e muito mais.
Esta documentação é estruturada com base na linha Laravel 13.x.
Estrutura do projeto
Um projeto Laravel possui diretórios com responsabilidades bem definidas.
app/
Código principal da aplicação.
bootstrap/
Inicialização do framework.
config/
Arquivos de configuração.
database/
Migrations, factories e seeders.
public/
Entrada pública da aplicação.
resources/
Views, CSS e JavaScript fonte.
routes/
Rotas da aplicação.
storage/
Logs, cache e arquivos gerados.
tests/
Testes automatizados.
vendor/
Dependências do Composer.
Configuração da aplicação
As configurações específicas de cada ambiente
devem ser armazenadas no arquivo .env.
APP_NAME="Meu Projeto"
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=meu_projeto
DB_USERNAME=root
DB_PASSWORD=
Ele pode conter credenciais de banco, chaves, tokens e outras informações sensíveis.
Artisan
Artisan é a interface de linha de comando do Laravel.
php artisan list
php artisan serve
php artisan route:list
php artisan optimize:clear
Rotas
Para páginas web, normalmente começamos utilizando:
Rota simples
use Illuminate\Support\Facades\Route;
Route::get('/sobre', function () {
return view('sobre');
});
Rota com Controller
use App\Http\Controllers\ClienteController;
Route::get(
'/clientes',
[ClienteController::class, 'index']
)->name('clientes.index');
Principais métodos HTTP
Controllers
Controllers centralizam a lógica responsável por tratar uma requisição.
Criando um Controller
php artisan make:controller ClienteController
Exemplo
<?php
namespace App\Http\Controllers;
class ClienteController extends Controller
{
public function index()
{
return view('clientes.index');
}
}
Request
O objeto Request fornece acesso aos dados enviados para a aplicação.
use Illuminate\Http\Request;
public function store(Request $request)
{
$nome = $request->input('nome');
$email = $request->input('email');
}
Responses
Controllers podem retornar views, redirects, JSON e outros tipos de resposta HTTP.
return view('clientes.index');
return redirect()->route('clientes.index');
return response()->json([
'success' => true,
]);
Middleware
Middleware pode analisar ou modificar uma requisição antes dela chegar à lógica principal.
Route::middleware('auth')->group(function () {
Route::get('/painel', function () {
return view('painel');
});
});
Proteção CSRF
Formulários web que enviam dados devem utilizar o token CSRF do Laravel.
<form method="POST" action="/cliente">
@csrf
<input type="text" name="nome">
<button type="submit">
Salvar
</button>
</form>
Blade
Blade é o mecanismo de templates utilizado pelo Laravel.
Layout
@extends('layouts.app')
@section('title', 'Clientes')
@section('content')
<h1>Clientes</h1>
@endsection
Condicionais
@if($cliente)
{{ $cliente->nome }}
@else
Cliente não encontrado.
@endif
Loop
@foreach($clientes as $cliente)
<p>
{{ $cliente->nome }}
</p>
@endforeach
Includes
@include('components.navbar')
@include('components.footer')
Vite
Vite é utilizado para processar e empacotar CSS e JavaScript da aplicação.
Desenvolvimento
npm install
npm run dev
Produção
npm run build
Carregando assets no layout
@vite([
'resources/css/app.css',
'resources/js/app.js'
])
CSS e JavaScript
Uma organização simples mantém os assets separados por responsabilidade e facilita a manutenção.
resources/css/app.css
Arquivo principal de estilos.
resources/css/components/
Estilos reutilizáveis de componentes.
resources/css/pages/
Estilos específicos de páginas.
resources/js/app.js
Entrada principal do JavaScript.
Importando CSS
@import "./components/effects.css";
@import "./laravel.css";
@import "./laravel-install.css";
@import "./laravel-doc.css";
Importando JavaScript
import './components/effects.js';
import './components/laravel-doc.js';
Banco de Dados
Laravel suporta diferentes bancos de dados.
Nos projetos A7 podemos configurar MySQL ou MariaDB
através do arquivo .env.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=a7_projeto
DB_USERNAME=root
DB_PASSWORD=
Migrations
Migrations funcionam como versionamento da estrutura do banco.
Criar migration
php artisan make:migration create_clientes_table
Exemplo
Schema::create('clientes', function (Blueprint $table) {
$table->id();
$table->string('nome');
$table->string('email')->unique();
$table->timestamps();
});
Executar migrations
php artisan migrate
Status
php artisan migrate:status
Rollback
php artisan migrate:rollback
Models
Models representam entidades da aplicação e normalmente fazem a ligação com tabelas do banco.
php artisan make:model Cliente
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Cliente extends Model
{
protected $fillable = [
'nome',
'email',
];
}
Para criar Model e Migration juntos:
php artisan make:model Cliente -m
Eloquent ORM
Eloquent permite trabalhar com registros através de Models e relacionamentos.
Buscar registros
$clientes = Cliente::all();
$cliente = Cliente::find(1);
$ativos = Cliente::where('ativo', true)->get();
Criar registro
Cliente::create([
'nome' => 'Agência A7 Sites',
'email' => 'contato@exemplo.com',
]);
Atualizar registro
$cliente = Cliente::findOrFail(1);
$cliente->update([
'nome' => 'Novo nome',
]);
Excluir registro
$cliente = Cliente::findOrFail(1);
$cliente->delete();
Query Builder
Query Builder permite construir consultas ao banco utilizando uma interface fluente.
Buscar registros
use Illuminate\Support\Facades\DB;
$clientes = DB::table('clientes')->get();
Utilizando condições
$clientes = DB::table('clientes')
->where('ativo', true)
->orderBy('nome')
->get();
Buscar um registro
$cliente = DB::table('clientes')
->where('id', 1)
->first();
Inserir registro
DB::table('clientes')->insert([
'nome' => 'Cliente Teste',
'email' => 'cliente@exemplo.com',
]);
Validation
Valide os dados recebidos antes de gravar ou processar informações da aplicação.
$validated = $request->validate([
'nome' => [
'required',
'string',
'max:255',
],
'email' => [
'required',
'email',
],
]);
Cache
Cache evita que informações caras de obter sejam processadas repetidamente.
use Illuminate\Support\Facades\Cache;
$clientes = Cache::remember(
'clientes',
600,
function () {
return Cliente::all();
}
);
Remover item
Cache::forget('clientes');
Jobs e Queues
Filas permitem executar tarefas fora da requisição principal.
Criar Job
php artisan make:job ProcessarPedido
Executar Worker
php artisan queue:work
Events & Listeners
Eventos ajudam a desacoplar diferentes partes da aplicação.
php artisan make:event PedidoCriado
php artisan make:listener EnviarConfirmacao
Mailables organizam o envio de emails pela aplicação.
php artisan make:mail PedidoConfirmado
use Illuminate\Support\Facades\Mail;
Mail::to($cliente->email)
->send(new PedidoConfirmado());
Notifications
O sistema de notificações pode utilizar diferentes canais dependendo da aplicação.
php artisan make:notification PedidoRecebido
Task Scheduling
O Scheduler permite programar tarefas recorrentes da aplicação de forma organizada.
Exemplo
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')
->daily();
Executar localmente
php artisan schedule:work
Testes
Laravel possui integração para criação e execução de testes automatizados.
Executar testes
php artisan test
Criar teste
php artisan make:test ClienteTest
Logs
Os logs da aplicação são armazenados normalmente em:
Linux / servidor
tail -f storage/logs/laravel.log
Gravar mensagem
use Illuminate\Support\Facades\Log;
Log::info('Processo iniciado');
Log::error('Ocorreu um erro');
Deployment
Em produção, a raiz pública do servidor deve
apontar para o diretório public/.
Dependências PHP
composer install --no-dev --optimize-autoloader
Assets
npm install
npm run build
Banco de dados
php artisan migrate --force
Otimização
php artisan optimize
Nunca deixe APP_DEBUG=true
em produção.
Para limpar caches compilados:
php artisan optimize:clear
Laravel Documentation
Este guia da A7 resume os assuntos mais utilizados no desenvolvimento diário. Para referências completas e APIs avançadas, utilize também a documentação oficial.
Abrir documentação oficial