Laravel 11: as novidades que você precisa conhecer

1. Estrutura Simplificada e Novo Esqueleto da Aplicação

O Laravel 11 introduziu uma reformulação significativa na estrutura inicial dos projetos. A equipe de desenvolvimento removeu diversos arquivos e classes que antes eram considerados essenciais, mas que na prática geravam complexidade desnecessária.

Arquivos removidos ou simplificados:
- app/Http/Kernel.php — removido
- app/Http/Exceptions/Handler.php — removido
- app/Console/Kernel.php — removido
- app/Providers/EventServiceProvider.php — removido
- config/broadcasting.php — removido
- config/view.php — removido

O novo ponto central de configuração é o arquivo bootstrap/app.php, que agora concentra as definições de middleware, service providers e configurações de roteamento.

// bootstrap/app.php - Laravel 11
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'role' => \App\Http\Middleware\CheckRole::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

Essa simplificação reduz a curva de aprendizado para novos desenvolvedores e facilita a manutenção de projetos existentes.

2. Configuração Mínima e Arquivo .env Otimizado

O arquivo .env do Laravel 11 foi drasticamente reduzido. Muitas variáveis de ambiente que antes eram obrigatórias agora são resolvidas por convenção.

# .env - Laravel 11 (versão mínima)
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=sqlite
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD não são necessários para SQLite

SESSION_DRIVER=file

Principais mudanças:
- Banco SQLite como padrão (sem necessidade de configurar host, porta ou credenciais)
- Remoção de variáveis como LOG_CHANNEL, BROADCAST_DRIVER, FILESYSTEM_DISK
- Cache, sessão e fila agora usam configurações sensatas por padrão

Para migrar projetos existentes, o Laravel 11 oferece o comando:

php artisan config:publish

Este comando publica os arquivos de configuração que foram removidos do núcleo, permitindo compatibilidade com projetos mais antigos.

3. Novidades no Roteamento e Controllers

O roteamento no Laravel 11 foi simplificado com a remoção da necessidade do RouteServiceProvider. Agora as rotas são carregadas diretamente pelo arquivo bootstrap/app.php.

// routes/web.php - Laravel 11
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DashboardController;

// Rota básica
Route::get('/', function () {
    return view('welcome');
});

// Rota com view direta
Route::view('/dashboard', 'dashboard');

// Rota com redirect
Route::redirect('/home', '/dashboard', 301);

// Grupo com rate limiting embutido
Route::middleware(['auth', 'throttle:60,1'])->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit']);
    Route::put('/profile', [ProfileController::class, 'update']);
});

Novidades importantes:
- Métodos Route::view() e Route::redirect() mais enxutos, sem necessidade de controllers
- Rate limiting nativo nos grupos de rotas
- Suporte a múltiplos arquivos de rotas organizados por domínio ou funcionalidade

4. Melhorias no SQLite e Banco de Dados

O SQLite agora é o driver padrão para novos projetos Laravel 11. Isso representa uma mudança significativa em relação às versões anteriores que usavam MySQL.

// config/database.php - Configuração SQLite padrão
'default' => env('DB_CONNECTION', 'sqlite'),

'sqlite' => [
    'driver' => 'sqlite',
    'url' => env('DB_URL'),
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],

Benefícios do SQLite no Laravel 11:
- Suporte completo a foreign keys e índices
- Queries paralelas para melhor performance
- Ideal para desenvolvimento e projetos de pequeno/médio porte
- Redução da complexidade de setup (sem necessidade de servidor de banco separado)

Para produção, o Laravel 11 também melhorou o suporte a bancos como MySQL, PostgreSQL e SQL Server, com otimizações no query builder e no Eloquent ORM.

5. Health Check e Monitoramento Integrado

O Laravel 11 introduz endpoints de health check prontos para uso, facilitando o monitoramento da aplicação.

// bootstrap/app.php - Configuração do health check
->withRouting(
    web: __DIR__.'/../routes/web.php',
    api: __DIR__.'/../routes/api.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/up',  // Endpoint de health check
)

Rotas disponíveis:
- /up — Retorna 200 se a aplicação estiver funcionando
- /health — Pode ser personalizada para verificar banco, cache e filas

Para criar verificações personalizadas:

// App\Health\CustomHealthCheck.php
<?php

namespace App\Health;

use Illuminate\Support\Facades\Cache;
use Spatie\Health\Checks\Check;
use Spatie\Health\Checks\Result;

class CacheHealthCheck extends Check
{
    public function run(): Result
    {
        $result = Result::make();

        try {
            Cache::store('redis')->set('health_check', true);
            $result->ok('Cache Redis funcionando');
        } catch (\Exception $e) {
            $result->failed('Erro no cache: ' . $e->getMessage());
        }

        return $result;
    }
}

Esses endpoints podem ser integrados com ferramentas como Laravel Pulse, Laravel Horizon e serviços externos como Pingdom ou UptimeRobot.

6. Remoção de Facades e Helpers Legados

O Laravel 11 removeu várias facades que eram consideradas desnecessárias ou que incentivavam más práticas.

Facades removidas:
- Request — use injeção de dependência
- Response — use response() helper ou retorne diretamente
- URL — use url() helper ou injeção de UrlGenerator

// Antes (Laravel 10)
<?php

use Illuminate\Support\Facades\Request;

class UserController extends Controller
{
    public function store()
    {
        $name = Request::input('name');
        // ...
    }
}

// Depois (Laravel 11) - Injeção de dependência
<?php

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $name = $request->input('name');
        // ...
    }
}

Helpers mantidos (com recomendações):
- app() — para resolver classes do container
- config() — para acessar configurações
- env() — apenas para arquivos de configuração, não em controllers

7. Atualizações no Artisan e Comandos Úteis

O Artisan recebeu novos comandos que agilizam o desenvolvimento e promovem boas práticas de código limpo.

# Novos comandos no Laravel 11
php artisan make:class PaymentService
php artisan make:enum PaymentStatus
php artisan make:interface PaymentGatewayInterface
php artisan make:trait HasTimestamps
php artisan install:api  # Configura Laravel Sanctum rapidamente

Exemplo prático com make:enum:

// app/Enums/PaymentStatus.php
<?php

namespace App\Enums;

enum PaymentStatus: string
{
    case Pending = 'pending';
    case Completed = 'completed';
    case Failed = 'failed';
    case Refunded = 'refunded';

    public function label(): string
    {
        return match($this) {
            self::Pending => 'Pendente',
            self::Completed => 'Concluído',
            self::Failed => 'Falhou',
            self::Refunded => 'Reembolsado',
        };
    }
}

O comando install:api é particularmente útil para projetos que precisam de autenticação API, configurando automaticamente o Laravel Sanctum com as rotas e middlewares necessários.

Conclusão

O Laravel 11 representa um marco na evolução do framework, priorizando simplicidade, performance e boas práticas. As mudanças na estrutura, a adoção do SQLite como padrão e a remoção de componentes legados tornam o framework mais acessível para iniciantes e mais eficiente para projetos profissionais.

Para aproveitar ao máximo essas novidades, recomenda-se iniciar novos projetos diretamente com Laravel 11 e planejar a migração gradual de projetos existentes, utilizando os comandos de publicação de configuração quando necessário.


Referências