Laravel 5.5 is the second LTS (Long-Term Support) release, bringing significant improvements while maintaining stability for three years. At ZIRA Software, we migrated production applications to 5.5, gaining modern features with guaranteed long-term support.
Why LTS Matters
LTS benefits:
- 3 years bug fixes
- 4 years security patches
- Production stability
- Time to upgrade gradually
- Enterprise-ready
5.5 LTS timeline:
- Released: August 2017
- Bug fixes until: August 2020
- Security fixes until: August 2021
Package Auto-Discovery
No more manual registration:
Before:
// config/app.php
'providers' => [
Barryvdh\Debugbar\ServiceProvider::class,
Laravel\Tinker\TinkerServiceProvider::class,
],
After:
composer require barryvdh/laravel-debugbar
# Automatically registered!
Package developers:
{
"extra": {
"laravel": {
"providers": [
"Vendor\\Package\\PackageServiceProvider"
],
"aliases": {
"Package": "Vendor\\Package\\Facades\\Package"
}
}
}
}
API Resources
Transform models to JSON elegantly:
php artisan make:resource UserResource
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'posts_count' => $this->posts->count(),
'created_at' => $this->created_at->toDateTimeString(),
];
}
}
Use in controller:
return new UserResource($user);
return UserResource::collection(User::all());
Custom Validation Rules
Create reusable validation:
php artisan make:rule Uppercase
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Uppercase implements Rule
{
public function passes($attribute, $value)
{
return strtoupper($value) === $value;
}
public function message()
{
return 'The :attribute must be uppercase.';
}
}
Use:
$request->validate([
'name' => ['required', new Uppercase],
]);
Frontend Presets
Remove frontend boilerplate:
php artisan preset none # Remove Bootstrap
php artisan preset react # Install React
php artisan preset vue # Install Vue (default)
Community presets:
composer require laravel-frontend-presets/tailwindcss
php artisan preset tailwindcss
Improved Exception Rendering
Better error pages:
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
public function render($request, Exception $exception)
{
if ($exception instanceof CustomException) {
return response()->view('errors.custom', [], 500);
}
return parent::render($request, $exception);
}
public function report(Exception $exception)
{
if ($exception instanceof ReportableException) {
// Send to external service
}
parent::report($exception);
}
}
Custom error pages:
{{-- resources/views/errors/404.blade.php --}}
@extends('layouts.app')
@section('content')
<h1>Page Not Found</h1>
<p>Sorry, the page you're looking for doesn't exist.</p>
@endsection
Whoops Integration
Beautiful error pages in development:
Automatically included! Whoops provides detailed error information with code context.
Blade Improvements
New directives:
{{-- @auth / @guest --}}
@auth
<p>Welcome, {{ auth()->user()->name }}</p>
@endauth
@guest
<a href="/login">Login</a>
@endguest
{{-- @dump / @dd --}}
@dump($users)
@dd($posts)
{{-- Component aliases --}}
@component('components.alert')
@slot('title')
Important Notice
@endslot
This is the alert content.
@endcomponent
Request Validation
Validate with methods:
// Before
$this->validate($request, [
'title' => 'required',
]);
// After (5.5)
$request->validate([
'title' => 'required',
]);
Custom error bags:
$request->validate([
'email' => 'required|email',
], [], [], 'login');
Route Improvements
Redirect methods:
Route::redirect('/here', '/there');
Route::redirect('/here', '/there', 301);
Route::permanentRedirect('/here', '/there');
View routes:
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
Conditional Notifications
Only notify if condition met:
$user->notify(new InvoicePaid($invoice));
// With condition
$user->notifyNow(new InvoicePaid($invoice));
Mail Improvements
Markdown mail templates:
php artisan make:mail OrderShipped --markdown=emails.orders.shipped
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class OrderShipped extends Mailable
{
use Queueable, SerializesModels;
public $order;
public function build()
{
return $this->markdown('emails.orders.shipped');
}
}
Template:
@component('mail::message')
# Order Shipped
Your order has been shipped!
@component('mail::button', ['url' => $url])
View Order
@endcomponent
Thanks,<br>
{{ config('app.name') }}
@endcomponent
Cache Locks
Atomic operations:
Cache::lock('process-order')->get(function () {
// Process order exclusively
});
// With timeout
Cache::lock('process-order', 10)->get(function () {
// Lock for 10 seconds max
});
New Artisan Commands
# Make factory
php artisan make:factory PostFactory
# Make rule
php artisan make:rule Uppercase
# Make exception
php artisan make:exception CustomException
# Preset commands
php artisan preset none
Collection Methods
New collection methods:
$collection = collect([1, 2, 3, 4, 5]);
// Dump and continue
$collection->dump();
// Tap
$collection->tap(function ($collection) {
Log::info($collection);
})->each(...);
Optional Helper
Avoid null checks:
// Before
$name = $user ? $user->profile ? $user->profile->name : null : null;
// After
$name = optional($user->profile)->name;
Database Improvements
Default string length:
// AppServiceProvider
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
JSON where clauses:
$users = User::whereJsonContains('options->languages', 'en')->get();
$users = User::whereJsonLength('options->languages', 3)->get();
Testing Improvements
Better assertions:
$response->assertJson([
'created' => true,
]);
$response->assertJsonFragment([
'name' => 'Laravel',
]);
$response->assertJsonMissing([
'password' => 'secret',
]);
Upgrade Path
From 5.4 to 5.5:
# Update composer.json
"laravel/framework": "5.5.*"
# Update dependencies
composer update
# Clear caches
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Run migrations if needed
php artisan migrate
Breaking changes:
- Artisan
fire()renamed tohandle() - Custom middleware parameters changed
- Some config file updates required
Conclusion
Laravel 5.5 LTS provides modern features with enterprise stability. From auto-discovery to API resources to improved testing, 5.5 makes development faster while ensuring long-term support. At ZIRA Software, 5.5 LTS powers critical production applications with confidence.
Upgrade to 5.5 for modern Laravel development with guaranteed long-term support.
Need help upgrading to Laravel 5.5 LTS or building new applications? Contact ZIRA Software to discuss Laravel development, upgrade strategies, and enterprise application architecture.