SPIN Framework Changelog
- Feature: Add domain exception classes:
CacheException,ConfigException,DatabaseException,MiddlewareException— all extendingSpinException - Feature: Wire
CacheExceptioninto cache adapters (APCu, Redis),ConfigExceptionintoConfig,DatabaseExceptionintoPdoConnectionandConnectionManager - Fix:
ConnectionManagerpassword-sanitization now throwsDatabaseExceptionwithout$previouson tainted traces, preventing credential leakage
- Feature:
.envfile auto-loading —DotEnv::load()reads.envfrom the project root at startup, populating environment variables before config macro expansion andenv()calls; real process env vars always take precedence - Fix:
${env:VAR:default}inline default syntax in config macros now works as documented; missing variables now resolve to the specified default instead of silently dropping to empty string
- Fix: Removed incorrect route-level middleware documentation from recipes and user guide; middleware applies at common/group level only
- Fix: CORS-Handling, Authentication, and Rate-Limiting recipe docs updated with correct group-scoped middleware patterns
- Feature: Controller short-name resolution — bare class names in route
handlerfields are resolved viaApp\Controllers\{Name}fallback - Feature: Middleware short-name resolution — bare class names in
before/afterarrays are resolved viaApp\Middlewares\{Name}fallback
- Documentation: Comprehensive developer documentation with Getting Started guides, Best Practices, Recipes, and Contributor Guide sections
- Documentation: AI instructions for Claude Code, GitHub Copilot, and generic LLMs in dedicated instruction files
- Documentation: Reorganized doc/ structure with navigation hub (doc/README.md) guiding users to appropriate sections
- Documentation: Complete API reference documenting core framework classes, methods, and helper functions
- Documentation: Updated CLAUDE.md and README.md with references to comprehensive documentation
- Security: Upgraded firebase/php-jwt from v6 to v7 (resolves PKSA-y2cr-5h3j-g3ys vulnerability)
- Bug Fix: APCu cache adapter now properly handles DateInterval objects in set() method
- Bug Fix: JWT test key length updated to meet firebase/php-jwt v7 stricter validation (32+ bytes for HS256)
- CI/CD: Enhanced GitHub Actions pipeline with Redis, MySQL, and PostgreSQL sidecar services
- CI/CD: Added memory overcommit configuration for reliable Redis startup in CI environments
- Testing: Added database and cache adapter configurations to test suite (config-unittest.json)
- Testing: Enabled autodiscovery of external services (Redis, MySQL, PostgreSQL) for conditional test execution
- Code cleanup and refactoring
- Unittests updated to support PHP 8.4 and PHPUnit 12
- Docblocks refactored in many places
- Config automatically replaces ${env:VAR} environment macros on loading
- Hook related things removed from codebase
- Bugfix on PDO not correctly parsing default options
- Add Redit and cache adapters unit tests with CI sidecar container
- Add MySQL and PDO unit tests with CI sidecar container
- More League/Container deprecated usage fix
- Update League/Container usage preventing Spin from booting up
- Better compatibility with PHP 8.1
- Fix MySQL PDO driver compatibility (Removal of overridden connect base method)
- Remove deprecated error constant E_STRICT usage
- Remove AbstractBaseDaos
- Extracted
RequestIdClassfromApplication.phpinto its own file undersrc/Classes/RequestIdClass.php. - Updated all usages to reference the new class location and namespace.
- Added comprehensive class and method docblocks to
RequestIdClassfor improved code documentation and IDE support. - Fixed Redis adapter test to pass connection options in the correct structure (
optionskey). - Fixed Redis adapter to throw clear exception if connection options are missing.
- Updated container test to use correct
RequestIdClassnamespace and string casting for assertion.
- Support for PHP 8.4
- Updated composer.json with newer versions of packages
- New options for logging. "max_buffered_lines" and "flush_overflow_to_disk"
- Composer packages updated to newer versions
- Redis adapter fixes
- Tests updated
- Docblock corrections
- VERSION file added
- Added extended cipher methods
- Added "PHP Fatal Error" catching, making framework return a 500 Error to the caller with the last error message
- Variable definitions in classes with
/** @vardocblocks in most places
- Guzzle v2.0.0 stream support via
Utils::streamFor()
- Started using Ramsey\UUID for UUID generation
- Added UUID v6 generation as default in UUID::generate() method
- app()->setCookie() internally uses setCookie() with array to set HTTPOnly=true and 'SameSite'=>'Strict' for cookies by default
- container() now uses internal globalVars instead when get/set variables
- Added
copyto UploaedFiles class
- Storing/Getter for initial memory usage
- Determine Mime-Type for file (if not set)
- Support for empty
pathin routeGroups
- PDO param binding examines the type of value passed, and uses correct PDO::PARAM_* for it
- Composer v2 compatibility, class names corrected
- responseXML() fixed
- Package.json version corrected
- PHP v7.4.x compatibility verified
- responseFile() has new param for removing file after sending
- UploadedFile and UploadedFilesmanager fixes
- Added
getSharedStoragePath()(docker persitent storage compatibility) - Root namespaces for
Helpers.php - Added error-checking for some variables on application startup
- License date updated
- Unittests updated to work with PHPUnit v8
- Technical documentation pages
- Monolog v2+ package in composer
- Leauge/Container v3+
- Added \ for all root namespace functions (performance enhancement)
- Code cleanup
- Unittests dir /tests rearranged
- Apcu basic unittest added
- Added postParams() method to helpers
- No recorded changes
- No recorded changes
- Changed the Database Connection system. New AbstractConnection class.
- Initial code