Migration to v2.0.0
Migrating to PivotPHP v2.0.0
This guide helps you migrate from PivotPHP v1.x to v2.0.0.
⚠️ Breaking Release
Version 2.0.0 includes breaking changes. All applications must update imports and namespaces. Estimated migration time: 15-30 minutes for typical applications.
Version 2.0.0 includes breaking changes. All applications must update imports and namespaces. Estimated migration time: 15-30 minutes for typical applications.
Overview
What’s Changed:
- ❌ Removed 110 legacy namespace aliases
- ❌ Removed 30 deprecated files
- ✅ Cleaner, modern namespace structure
- ✅ 18% code reduction (11,871 lines)
- ✅ 59% faster autoload performance
Quick Migration Checklist
- Update
composer.jsonto requirepivotphp/core:^2.0 - Update PSR-15 middleware imports
- Remove
Simple*prefix from class names - Update OpenAPI/Swagger usage
- Run automated migration script
- Test your application thoroughly
Breaking Changes
1. Middleware Namespaces
Security Middleware
// ❌ OLD (v1.x)
use PivotPHP\Core\Http\Psr15\Middleware\AuthMiddleware;
use PivotPHP\Core\Http\Psr15\Middleware\CsrfMiddleware;
use PivotPHP\Core\Http\Psr15\Middleware\XssMiddleware;
use PivotPHP\Core\Http\Psr15\Middleware\SecurityHeadersMiddleware;
// ✅ NEW (v2.0.0)
use PivotPHP\Core\Middleware\Security\AuthMiddleware;
use PivotPHP\Core\Middleware\Security\CsrfMiddleware;
use PivotPHP\Core\Middleware\Security\XssMiddleware;
use PivotPHP\Core\Middleware\Security\SecurityHeadersMiddleware;
HTTP Middleware
// ❌ OLD (v1.x)
use PivotPHP\Core\Http\Psr15\Middleware\CorsMiddleware;
use PivotPHP\Core\Http\Psr15\Middleware\ErrorMiddleware;
// ✅ NEW (v2.0.0)
use PivotPHP\Core\Middleware\Http\CorsMiddleware;
use PivotPHP\Core\Middleware\Http\ErrorMiddleware;
use PivotPHP\Core\Middleware\Http\ApiDocumentationMiddleware;
Performance Middleware
// ❌ OLD (v1.x)
use PivotPHP\Core\Http\Psr15\Middleware\RateLimitMiddleware;
use PivotPHP\Core\Http\Psr15\Middleware\CacheMiddleware;
// ✅ NEW (v2.0.0)
use PivotPHP\Core\Middleware\Performance\RateLimitMiddleware;
use PivotPHP\Core\Middleware\Performance\CacheMiddleware;
2. Simple* Prefix Removal
// ❌ OLD (v1.x)
use PivotPHP\Core\Middleware\SimpleRateLimitMiddleware;
use PivotPHP\Core\Security\SimpleCsrfMiddleware;
// ✅ NEW (v2.0.0)
use PivotPHP\Core\Middleware\Performance\RateLimitMiddleware;
use PivotPHP\Core\Middleware\Security\CsrfMiddleware;
3. OpenAPI System
// ❌ OLD (v1.x) - Deprecated approach
use PivotPHP\Core\OpenApi\OpenApiExporter;
$exporter = new OpenApiExporter($router);
$schema = $exporter->export();
file_put_contents('openapi.json', json_encode($schema));
// ✅ NEW (v2.0.0) - Middleware approach
use PivotPHP\Core\Middleware\Http\ApiDocumentationMiddleware;
$app->use(new ApiDocumentationMiddleware([
'title' => 'My API',
'version' => '1.0.0',
'docs_path' => '/docs', // OpenAPI JSON
'swagger_path' => '/swagger' // Swagger UI
]));
4. Removed Components
DynamicPoolManager
// ❌ OLD (v1.x) - Removed
use PivotPHP\Core\Performance\Pool\DynamicPoolManager;
$poolManager = new DynamicPoolManager();
// ✅ NEW (v2.0.0) - Use simple ObjectPool
use PivotPHP\Core\Performance\Pool\ObjectPool;
$pool = new ObjectPool(MyClass::class);
SimpleTrafficClassifier
// ❌ OLD (v1.x) - Removed (over-engineered)
use PivotPHP\Core\Performance\Classification\SimpleTrafficClassifier;
// ✅ NEW (v2.0.0) - Use framework defaults
// No replacement needed for POC/prototype use cases
Automated Migration
Step 1: Update Composer
# Update composer.json
composer require pivotphp/core:^2.0
# Or manually edit composer.json:
{
"require": {
"pivotphp/core": "^2.0"
}
}
composer update
Step 2: Run Automated Script
# PSR-15 Middleware namespace updates
find src/ -type f -name "*.php" -exec sed -i \
's/use PivotPHP\\Core\\Http\\Psr15\\Middleware\\/use PivotPHP\\Core\\Middleware\\/g' {} \;
# Update specific middleware to correct categories
find src/ -type f -name "*.php" -exec sed -i \
's/use PivotPHP\\Core\\Middleware\\AuthMiddleware/use PivotPHP\\Core\\Middleware\\Security\\AuthMiddleware/g' {} \;
find src/ -type f -name "*.php" -exec sed -i \
's/use PivotPHP\\Core\\Middleware\\CsrfMiddleware/use PivotPHP\\Core\\Middleware\\Security\\CsrfMiddleware/g' {} \;
find src/ -type f -name "*.php" -exec sed -i \
's/use PivotPHP\\Core\\Middleware\\CorsMiddleware/use PivotPHP\\Core\\Middleware\\Http\\CorsMiddleware/g' {} \;
find src/ -type f -name "*.php" -exec sed -i \
's/use PivotPHP\\Core\\Middleware\\RateLimitMiddleware/use PivotPHP\\Core\\Middleware\\Performance\\RateLimitMiddleware/g' {} \;
# Remove Simple* prefixes
find src/ -type f -name "*.php" -exec sed -i \
's/SimpleRateLimitMiddleware/RateLimitMiddleware/g' {} \;
find src/ -type f -name "*.php" -exec sed -i \
's/SimpleCsrfMiddleware/CsrfMiddleware/g' {} \;
Step 3: Manual Updates
- Search for OpenApiExporter usage:
grep -r "OpenApiExporter" src/ - Replace with ApiDocumentationMiddleware:
$app->use(new ApiDocumentationMiddleware([ 'title' => 'My API', 'version' => '1.0.0' ])); - Search for DynamicPoolManager:
grep -r "DynamicPoolManager" src/ - Replace with ObjectPool or remove if not needed
Step 4: Test Everything
# Run your test suite
composer test
# Or manually test
./vendor/bin/phpunit
# Start dev server and test manually
php -S localhost:8000 -t public
Example: Complete Migration
Before (v1.x)
<?php
require __DIR__ . '/../vendor/autoload.php';
use PivotPHP\Core\Core\Application;
use PivotPHP\Core\Http\Psr15\Middleware\CorsMiddleware;
use PivotPHP\Core\Http\Psr15\Middleware\AuthMiddleware;
use PivotPHP\Core\Middleware\SimpleRateLimitMiddleware;
use PivotPHP\Core\OpenApi\OpenApiExporter;
$app = new Application();
// Middleware
$app->use(new CorsMiddleware());
$app->use(new AuthMiddleware(['secret' => 'key']));
$app->use(new SimpleRateLimitMiddleware());
// Routes
$app->get('/api/users', [UserController::class, 'index']);
// OpenAPI export
$exporter = new OpenApiExporter($app->getRouter());
$schema = $exporter->export();
$app->run();
After (v2.0.0)
<?php
require __DIR__ . '/../vendor/autoload.php';
use PivotPHP\Core\Core\Application;
use PivotPHP\Core\Middleware\Http\CorsMiddleware;
use PivotPHP\Core\Middleware\Security\AuthMiddleware;
use PivotPHP\Core\Middleware\Performance\RateLimitMiddleware;
use PivotPHP\Core\Middleware\Http\ApiDocumentationMiddleware;
$app = new Application();
// Middleware
$app->use(new CorsMiddleware());
$app->use(new AuthMiddleware(['secret' => 'key']));
$app->use(new RateLimitMiddleware());
// API Documentation
$app->use(new ApiDocumentationMiddleware([
'title' => 'My API',
'version' => '1.0.0'
]));
// Routes
$app->get('/api/users', [UserController::class, 'index']);
$app->run();
Common Issues
Issue 1: Class Not Found
Error:
Fatal error: Class 'PivotPHP\Core\Http\Psr15\Middleware\AuthMiddleware' not found
Solution:
// Update the namespace
use PivotPHP\Core\Middleware\Security\AuthMiddleware;
Issue 2: Simple* Prefix Not Found
Error:
Fatal error: Class 'SimpleRateLimitMiddleware' not found
Solution:
// Remove the Simple prefix
use PivotPHP\Core\Middleware\Performance\RateLimitMiddleware;
Issue 3: OpenApiExporter Missing
Error:
Fatal error: Class 'PivotPHP\Core\OpenApi\OpenApiExporter' not found
Solution:
// Use ApiDocumentationMiddleware instead
use PivotPHP\Core\Middleware\Http\ApiDocumentationMiddleware;
$app->use(new ApiDocumentationMiddleware([
'title' => 'My API',
'version' => '1.0.0'
]));
// Access documentation at:
// http://localhost:8080/swagger (Swagger UI)
// http://localhost:8080/docs (OpenAPI JSON)
Testing Your Migration
1. Automated Tests
# Run full test suite
composer test
# Run specific tests
./vendor/bin/phpunit tests/Unit
./vendor/bin/phpunit tests/Integration
2. Manual Testing
# Start development server
php -S localhost:8000 -t public
# Test endpoints
curl http://localhost:8000/api/users
curl http://localhost:8000/swagger
curl http://localhost:8000/docs
3. Checklist
- All routes respond correctly
- Middleware executes as expected
- API documentation accessible
- Error handling works
- Authentication functions
- CORS headers present
- Rate limiting active
Benefits After Migration
Performance Improvements
- ✅ 59% faster autoload - Zero alias overhead
- ✅ 10% less memory - Cleaner architecture
- ✅ Faster bootstrap - ~6ms vs ~15ms
Code Quality
- ✅ Cleaner namespaces - More intuitive structure
- ✅ Better IDE support - Accurate autocomplete
- ✅ Easier maintenance - Less cognitive load
- ✅ Modern codebase - Zero deprecated code
Developer Experience
- ✅ Clearer documentation - Consistent examples
- ✅ Simpler learning - Fewer concepts to grasp
- ✅ Future-proof - Ready for PHP 8.4 features
Need Help?
- Full Migration Guide: GitHub Documentation
- Issues: Report problems
- Discussions: Ask questions
Estimated Migration Time:
- Small apps (< 10 routes): 15 minutes
- Medium apps (10-50 routes): 30 minutes
- Large apps (50+ routes): 1-2 hours
Difficulty: Low to Medium Worth It: Absolutely! 🚀