user_guide_src/source/changelogs/v4.7.1.rst
############# Version 4.7.1 #############
Release Date: March 22, 2026
4.7.1 release of CodeIgniter4
.. contents:: :local: :depth: 3
BREAKING
CodeIgniter\Database\SQLite3\Connection::$busyTimeout is now typed as ?int. Custom subclasses that redeclare this property will need to be updated.Message Changes
Images.unsupportedImageCreate.Validation.valid_cc_num key to Validation.valid_cc_number.Changes
Events::cleanupForWorkerMode() now accepts an optional
$resetEventListeners array parameter, corresponding to the new
$resetEventListeners property in Config\WorkerMode. This allows users to
declare event names that should be cleaned up between requests when listeners are
registered inside event callbacks. See :ref:worker-mode-reset-event-listeners.builds script (for codeigniter4/appstarter), the next argument has been added
to switch 4.7.x to the next minor version 4.8.x-dev. See :ref:Latest Dev<switch-to-dev-version>.Bugs Fixed
generateNonces() produces corrupted JSON responses by replacing CSP nonce placeholders with unescaped double quotes. The method now automatically JSON-escapes nonce attributes when the response Content-Type is JSON.getScriptNonce() and getStyleNonce() were not added to the script-src-elem and style-src-elem directives, causing nonces to be silently ignored by browsers when those directives were present.HTTP/2 200) were not parsed correctly, causing the status code and protocol version to be ignored.BaseConnection::callFunction() could double-prefix already-prefixed function names.BasePreparedQuery::prepare() could mis-handle SQL containing colon syntax by over-broad named-placeholder replacement. It now preserves PostgreSQL cast syntax like ::timestamp..env overrides) were not normalized for typed connection properties, which could cause SQLite3 options like synchronous and busyTimeout to be assigned with the wrong type.BaseModel::updateBatch() threw an exception when updateOnlyChanged was true and the index field value did not change.Model::chunk() ran an unnecessary extra database query at the end of iteration. chunk() now also throws InvalidArgumentException when called with a non-positive chunk size.MemcachedHandler where the constructor incorrectly threw an exception when savePath was not empty.FeatureTestTrait::withRoutes() where invalid HTTP methods were not properly validated, thus passing them all to RouteCollection.?debugbar_time=... was not interactive.valid_cc_number now has the correct translation.contacts.friends.*.name).View would throw an error if the appOverridesFolder config property was not defined.See the repo's
CHANGELOG.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md>_
for a complete list of bugs fixed.