Version 4.0.4

Release Date: July 15, 2020

4.0.4 release of CodeIgniter4


  • Added $arguments parameter to after() and before() in FilterInterface. This is a breaking change, so all code implementing the FilterInterface must be updated.


  • The location for the SQLite3 database has changed and by default will be now located in a writable folder instead of the public folder.

  • New CLI command: cache:clear that will destroy all data within the current cache engine.

  • Thanks to samsonasik, we have several libraries brought up to 100% test coverage.

  • A few small performance increases. Every ounce matters!

  • getFieldData() in the database results class now returns column type and length.

  • Default .htaccess file updated to work better with extended characters.

  • New Testing Feature: Fabricator makes creating mock classes simple and repeatable in your tests.

  • Model class can now have the callbacks overridden at runtime. Useful for testing.

  • A number of improvements to Feature Tests in general.

  • New command() helper function to programatically run your CLI commands. Useful for testing and cron jobs.

  • New command, make:seeder to generate a Database Seed class skeleton file.

  • Colors now available on the CLI within Windows, as well as other Windows-related CLI improvements.

  • New helper mb_url_title() that functions like url_title() but automatically escapes and extended URL characters.

  • Image library now supports webp images.

  • Added Unicode support for regular expressions in the Router.

  • Added support for removing hidden folders in the delete_files() helper.

  • fetchGlobal() in the Request class now supports applying filters to arrays of data, not just the first item.

  • file validation now works with arrays of files.

  • URI class now supports a setSilent() method that will disable the throwing of Exceptions.

  • New argument to URI::getSegment() that allows us to change the default value returned if nothing exists.

  • Implemented a withResource() in Image so that you can use method chaining instead of using the provided getResource() (used in tests). To just compress your image.

  • Cookies and headers can be copied from the global Response object when doing a redirect using the new withCookies() and withHeaders() methods.

  • Support for special prefix “hex2bin:” which can be used with $key parameter in Encryption class or in .env file.

Bugs Fixed

  • Fixed location for the SQLite3 database which by default will be now located in a writable folder instead of the public folder.

  • Fixed bug where force_https() could add https:// a second time.

  • Fixed a bug with CurlRequest that could result in incorrect “100 Continue” headers.

  • Image::save() bug fixed when $target parameter was null.

  • fixes for set_checkbox() and set_radio() when the $default parameter is set to true.

  • fix for result object handling in Model class.

  • fixed escape character SQLite database.

  • fix for inserts on Postgres and Entities when the primary key was null.

  • CLI scripts can now correctly recognize dashes within arguments.

  • CURLRequest now properly sets content length with multipart data.

  • Misc. stability improvements for the ImageMagick handler.

  • setting validation errors within a config file should now work.

  • Unicode characters are not escaped when saving JSON from Entities.

  • redirecting with a custom HTTP code should work correctly now.

  • Time::setTimezone() now working correctly.

  • added full outer join support for Postgres.

  • some cast items in the Entity (like array, json) were not being set correctly during a fill() process.

  • Fixed bug in Image GD handler that would try to compress images twice in certain cases.

  • Ensure get translation output logic work on selected locale, dashed locale, and fallback “en”.

  • Fix is_unique/is_not_unique validation called on POST/PUT via API in PostgreSQL.

  • Fixed a bug where filter arguments were not passed to after().

See the repo’s for a complete list of bugs fixed.