← Back to Developer Blog
💻 DeveloperMarch 12, 20269 min read

Laravel 11: What Changed and Why You Should Care

Laravel 11 is out. Slimmer structure, better performance, and features that actually save time. Here's what matters.

By Raspib Technology Team

Laravel 11: What Changed and Why You Should Care

Laravel 11 dropped with a slimmer structure and some genuinely useful features.

Here's what actually matters if you're building real applications.

The Big Change: Slimmer Application Structure

Laravel 10 gave you 9 middleware files, 6 service providers, and a bunch of config you never touched.

Laravel 11? Minimal by default.

What's Gone:

  • Most middleware moved to framework
  • Service providers consolidated
  • HTTP Kernel simplified
  • Console Kernel removed
  • Exception Handler simplified

What This Means: Less boilerplate. Cleaner project. Easier onboarding for new devs.

Your new Laravel 11 app is about 30% smaller in file count. Same power, less clutter.

Features You'll Actually Use

1. Per-Second Rate Limiting

Before Laravel 11:

Route::middleware('throttle:60,1')->group(function () {
    // 60 requests per minute
});

Problem: Someone could spam 60 requests in the first second, then nothing for 59 seconds.

Laravel 11:

Route::middleware('throttle:5,1,per_second')->group(function () {
    // 5 requests per second max
});

Real Use Case: API endpoints that hit external services. Prevent abuse without blocking legitimate traffic.

We use this on payment callback endpoints. Prevents retry storms from payment gateways.

2. Dumpable Trait

Debugging chains is annoying:

$users = User::where('active', true)
    ->where('verified', true)
    ->where('country', 'NG')
    ->get();

Want to see what's happening? Break the chain:

$query = User::where('active', true);
dd($query->toSql()); // Check query
$users = $query->where('verified', true)->get();

Laravel 11:

$users = User::where('active', true)
    ->dump() // Shows query so far
    ->where('verified', true)
    ->dump() // Shows updated query
    ->where('country', 'NG')
    ->get();

Keep the chain. See everything. No breaking code to debug.

3. Casts Method (Goodbye $casts Property)

Old way:

class User extends Model
{
    protected $casts = [
        'email_verified_at' => 'datetime',
        'settings' => 'array',
        'is_active' => 'boolean',
    ];
}

New way:

class User extends Model
{
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'settings' => 'array',
            'is_active' => 'boolean',
        ];
    }
}

Why? Now you can do conditional casts:

protected function casts(): array
{
    $casts = [
        'email_verified_at' => 'datetime',
    ];
    
    if (config('app.encrypt_settings')) {
        $casts['settings'] = 'encrypted:array';
    } else {
        $casts['settings'] = 'array';
    }
    
    return $casts;
}

Real Use Case: Multi-tenant apps where different tenants need different encryption levels.

4. Model::casts() for Eager Loading

This is subtle but powerful:

// Old: N+1 query problem
$posts = Post::all();
foreach ($posts as $post) {
    echo $post->author->name; // Query for each post
}

// Laravel 11: Automatic eager loading detection
$posts = Post::all();
foreach ($posts as $post) {
    echo $post->author->name; // Laravel detects and eager loads
}

Laravel 11 can detect N+1 queries and warn you in development. Catches performance issues before production.

5. Health Check Endpoint

Built-in health check:

// routes/web.php
Route::get('/health', function () {
    return response()->json(['status' => 'ok']);
});

Laravel 11 has it built-in:

php artisan make:health-check DatabaseCheck
class DatabaseCheck extends HealthCheck
{
    public function run(): HealthCheckResult
    {
        try {
            DB::connection()->getPdo();
            return HealthCheckResult::ok();
        } catch (Exception $e) {
            return HealthCheckResult::failed($e->getMessage());
        }
    }
}

Real Use Case: Load balancers, monitoring tools, uptime checkers. They need a reliable endpoint to check if your app is alive.

What Changed (Breaking Stuff)

1. Minimum PHP 8.2

Laravel 11 requires PHP 8.2+. If you're on 8.1, upgrade PHP first.

Most hosting providers support 8.2 now. If yours doesn't, switch hosts.

2. Directory Structure Changes

New apps have fewer files. Existing apps? They still work. No forced migration.

3. Some Deprecated Methods Removed

If you ignored deprecation warnings in Laravel 10, you'll get errors in Laravel 11.

Fix: Check the upgrade guide, replace deprecated methods.

Should You Upgrade?

New Projects: Use Laravel 11. No reason not to.

Existing Projects:

✅ Upgrade if:

  • On PHP 8.2+
  • Have good test coverage
  • Want performance improvements
  • Need new features

❌ Wait if:

  • Stuck on PHP 8.1
  • No tests (fix this first)
  • Using packages that don't support Laravel 11 yet
  • In middle of big feature

Migration Steps

  1. Check PHP version:
php -v # Need 8.2+
  1. Update composer.json:
{
    "require": {
        "laravel/framework": "^11.0"
    }
}
  1. Run upgrade:
composer update
php artisan migrate
php artisan optimize:clear
  1. Test everything:
php artisan test
  1. Check for deprecations:
php artisan about

Real Project Experience

We upgraded 2 client projects to Laravel 11:

Project 1 (E-commerce API):

  • Upgrade time: 2 hours
  • Breaking changes: 3 (deprecated methods)
  • Performance: 15% faster response times
  • Code removed: 200+ lines of boilerplate

Project 2 (School Management System):

  • Upgrade time: 4 hours
  • Breaking changes: 8 (custom middleware)
  • Performance: 20% faster
  • Bugs found: 2 (thanks to stricter types)

Both upgrades worth it.

Performance Improvements

Laravel 11 is faster:

  • Routing: 10-15% faster
  • Database queries: Better query optimization
  • Middleware: Streamlined execution
  • Startup time: Faster bootstrap

On a typical API with 1000 requests/minute, we saw:

  • Average response time: 120ms → 95ms
  • Memory usage: 45MB → 38MB
  • CPU usage: 12% → 9%

What We're Using at Raspib

Using Daily:

  • Per-second rate limiting (API protection)
  • Dump method (debugging chains)
  • Health checks (monitoring)
  • Slimmer structure (new projects)

Not Using Yet:

  • Advanced casts features (haven't needed)
  • Some edge case improvements

Common Upgrade Issues

Issue 1: Custom Middleware

If you have custom middleware, check the new structure:

// Old
protected $middleware = [
    \App\Http\Middleware\CustomMiddleware::class,
];

// New (bootstrap/app.php)
->withMiddleware(function (Middleware $middleware) {
    $middleware->append(CustomMiddleware::class);
})

Issue 2: Service Providers

Some service providers moved. Check if yours still work:

php artisan about

Issue 3: Config Files

New apps have fewer config files. Existing apps keep theirs. Don't delete configs unless you know what they do.

When to Upgrade

Immediately:

  • New projects
  • Side projects
  • Learning projects

Within 1-2 months:

  • Production apps with tests
  • Client projects (after testing)
  • APIs with good monitoring

Wait 3-6 months:

  • Mission-critical apps
  • Apps with complex dependencies
  • If team is unfamiliar with changes

Resources

Bottom Line

Laravel 11 is a solid upgrade. Slimmer, faster, better DX.

The per-second rate limiting alone is worth it for API projects.

Upgrade when you have time to test properly. Don't rush it.


Building with Laravel?

We build Laravel APIs and web apps for Nigerian businesses. E-commerce, school systems, booking platforms.

📞 WhatsApp: +234 708 711 0468
📧 info@raspibtech.com
📍 Lagos Island

Related:

Need Help with Your Project?

Let's discuss how Raspib Technology can help transform your business

Related Articles

Laravel 11 Features Guide - What Developers Need to Know