27 January 2025
Code Igniter version 4.6.0 is now available (major release).What's New in Code Igniter 4.6.0
Breaking Changes
refactor: remove deprecated failValidationError() in API\ResponseTrait by @kenjis in #8793
refactor: remove depreacted ResponseInterface::getReason() by @kenjis in #8841
refactor: remove deprecated Logger::cleanFilenames() and TestLogger::cleanup() by @kenjis in #8843
fix: Exception rework by @kenjis in #8728
fix: DefinedRouteCollector to use RouteCollectionInterface by @kenjis in #8911
fix: View::renderSection() return type by @kenjis in #8965
feat: [Filters] enables a filter to run more than once with different arguments by @kenjis in #8977
fix: add check for duplicate Registrar Auto-Discovery runs by @kenjis in #9073
fix: Time loses microseconds by @kenjis in #9081
feat: fix spark db:table causes errors with table name including special chars by @kenjis in #8748
fix: Time::createFromTimestamp() change for PHP 8.4 by @kenjis in #9105
fix: Time::setTimestamp()'s different behavior than DateTime by @kenjis in #9106
fix: inconsistency in detailed error reporting by @kenjis in #9144
feat: force PHP default 32 chars length at 4 bits to Session ID by @kenjis in #9139
fix: prioritize headers set by the Response class by @michalsn in #9235
Fixed Bugs
fix: add validation message for min_dims by @christianberkman in #8988
fix: [Filters] normalize $filters arguments by @kenjis in #8994
Enhancements
feat: [FileCollection] add function to reatain multiple patterns by @christianberkman in #8960
feat: [Validation] add min_dims rule in FileRules by @christianberkman in #8966
feat: add foundRows option for MySQLi config by @ducng99 in #8979
feat: spark filter:check shows filter classnames by @kenjis in #8985
feat: add BaseConnection::resetTransStatus() by @kenjis in #8767
feat: add Services::resetServicesCache() to reset services cache by @kenjis in #9012
feat: add "400 Bad Request" page for end users by @kenjis in #9044
feat: add directives to phpini:check command by @kenjis in #9117
feat: multiple hostname routing by @ddevsr in #9150
feat: workaround for implicit nullable deprecations in PHP 8.4 by @kenjis in #9140
feat: support CURL HTTP3 by @ddevsr in #9145
feat: design info environment top in error_exception by @ddevsr in #9241
feat: [Validation] add support for $dbGroup as parameter in is_unique and is_not_unique by @maniaba in #9216
feat: added the namespace option to the publish command by @dimtrovich in #9278
chore: update Kint to v6.0 by @ddevsr in #9289
feat: CURL option force_ip_resolve by @ddevsr in #9194
feat: add SQLite3 config synchronous by @michalsn in #9202
feat: Differentiate between kilobyte/kibibyte and megabyte/mebibyte by @ThomasMeschke in #9277
feat: Strict locale negotiation by @neznaika0 in #9360
fix: Add support for multibyte strings by @neznaika0 in #9372
feat: add page start end total to PagerRenderer by @murilohpucci in #9371
feat: New command lang:sync by @neznaika0 in #9023
feat: additional opcache setting in check php.ini by @ddevsr in #9032
Refactoring
refactor: Validation rules and tests by @kenjis in #8975
refactor: add : void by @kenjis in #9013
refactor: remove dependency on BaseConnection in TableName by @kenjis in #9104
refactor: add return type to closuer in FilterCheck by @neznaika0 in #9190
refactor: Remove deprecated RedirectException by @neznaika0 in #9399
refactor: Remove deprecated EVENT_PRIORITY_* by @neznaika0 in #9401
refactor: Remove deprecated View::$currentSection by @neznaika0 in #9403
refactor: Remove deprecated Cache::$storePath by @neznaika0 in #9404
refactor: Remove deprecated Config\Format::getFormatter() by @neznaika0 in #9405
refactor: Remove deprecation related to cookies by @neznaika0 in #9406