v4.5.8 (2025-01-19)
- HTTP Validation of header name and value: Fixed a potential vulnerability on lack of proper header validation for its name and value. See the security advisory for more information. Credits to @neznaika0 for reporting.
- Security fix: ensure csrf token is string by @datlechin in #9365
- fix: gather affected rows after query call failed by @michalsn in #9363
- refactor: use more strict result check on preg_match_all() result by @samsonasik in #9361
- refactor: Fix phpstan if.condNotBoolean by @neznaika0 in #9368
- refactor: Fix phpstan when delete string key by @neznaika0 in #9369
- refactor: Fix phpstan greaterOrEqual.invalid by @neznaika0 in #9370
- refactor: Fix phpstan nullCoalesce by @neznaika0 in #9374
- refactor: Fix phpstan isset offset by @neznaika0 in #9383
- refactor: Fix phpstan return.missing by @neznaika0 in #9382
- refactor: Fix phpstan booleanAnd.rightAlwaysTrue by @neznaika0 in #9367
- refactor: Fix phpstan codeigniter.configArgumentInstanceof by @neznaika0 in #9390
- refactor: Use
strtolowerwithstr_contains/str_**_withas replacement forstriposby @paulbalandan in #9414
v4.5.7 (2024-12-31)
- fix: handle namespaced helper found on Common helper by @samsonasik in #9354
- fix:
Forge::dropColumn()always returnsfalseon SQLite3 driver by @paulbalandan in #9351
- refactor: enable AddArrowFunctionReturnTypeRector by @samsonasik in #9343
v4.5.6 (2024-12-28)
- fix: auto_link() converts invalid strings like
://codeigniter.comby @kenjis in #9180 - fix: change session start log level by @element-code in #9221
- fix:
getValidated()when validation multiple asterisk by @ddevsr in #9220 - fix: Parser - Equal key name replace conflict by @CosDiabos in #9246
- fix: case-insensitivity in the
like()method when in use with accented characters by @michalsn in #9238 - fix: TypeError for routes when translateURIDashes is enabled by @maniaba in #9209
- fix:
fetchGlobal()with numeric key by @neznaika0 in #9251 - fix: curl request crashes with params that give an int once hexed. by @ping-yee in #9198
- docs: allow boolean values in the model for PHPStan by @ping-yee in #9276
- fix: respect complex language strings when using validation by @michalsn in #9201
- fix:
DownloadResponsecache headers by @michalsn in #9237 - docs: fix
@paramResponseInterface::setJSON()also accepts objects by @JulianAtkins in #9287 - fix: [CURLRequest] body contains "HTTP/1.0 200 Connection established" by @ping-yee in #9285
- fix:
Postgre\Connection::reconnect()TypeErrorinpg_ping()by @ping-yee in #9279 - fix: primary key mapping in the model for the entity by @michalsn in #9307
- fix: check if defined
WRITEPATHexists by @michalsn in #9317 - fix: handling binary data for prepared statement by @michalsn in #9337
- refactor: enable TypedPropertyFromAssignsRector by @samsonasik in #9184
- refactor: enable ClosureReturnTypeRector by @samsonasik in #9187
- refactor: remove unnecessary
is_countable()check ingetMethodParams()by @datamweb in #9206 - refactor: add more readonly property definitions on AutoRouteCollector and SiteURI by @samsonasik in #9210
- refactor: starter key handling in SodiumHandler by @datamweb in #9207
- refactor: enable rector code quality level 14 by @samsonasik in #9232
- refactor: cleanup
DatabaseHandler::gc()for session by @grimpirate in #9230 - refactor: enable rector code quality level 15 by @samsonasik in #9243
- refactor: enable SimplifyBoolIdenticalTrueRector by @samsonasik in #9244
- refactor: enable FlipTypeControlToUseExclusiveTypeRector by @samsonasik in #9253
- refactor: flip assert and actual value position on tests by @samsonasik in #9260
- perf: Improve call as
service()by @neznaika0 in #9248 - refactor: use compare empty array on Forge on keys property by @samsonasik in #9267
- refactor: Fix
phpstanerrors related toAutoloaderby @neznaika0 in #9249 - refactor: use
Superglobalsin setting 'REQUEST_METHOD' in `FeatureT… by @paulbalandan in #9294 - refactor: use
baseURIinstead ofbase_uriby @paulbalandan in #9296 - refactor: Apply code quality level 31 for rector by @samsonasik in #9303
- refactor: rename
stdclasstostdClassby @paulbalandan in #9312 - refactor: fix
phpDoc.parseErrorerrors by @paulbalandan in #9313 - refactor: fix
method.nameCaseerrors by @paulbalandan in #9315 - refactor: rename
controllertoControllerby @paulbalandan in #9314 - refactor: fix implicit array creation by @paulbalandan in #9316
- refactor: follow up implicit variable array by @ddevsr in #9319
- refactor: split phpstan-baseline into smaller files by @paulbalandan in #9299
- refactor: upgrade to use phpstan 2 and rector 2 by @samsonasik in #9322
- refactor: fix
Forge::processIndexes()for empty$this->fieldsby @paulbalandan in #9330 - refactor:
Reflection*::setAccessible()is now no-op in PHP 8.1 by @paulbalandan in #9331 - refactor: add
@throws RedirectExceptioninController::initControllerby @paulbalandan in #9327 - refactor: fix warning on new static usage by @paulbalandan in #9342
- refactor: fix used void return type by @paulbalandan in #9341
- refactor: enable instanceof and strictBooleans rector set by @samsonasik in #9339
v4.5.5 (2024-09-07)
- fix: Validation rule
differs/matcheswith dot array by @kenjis in #9103 - fix: update preload.php by @kenjis in #9111
- fix: [Validation] TypeError when using numeric field names by @kenjis in #9142
- fix:
auto_link()regexp by @kenjis in #9169
- refactor: reduce_multiples() and fix user guide by @kenjis in #9099
- refactor: enable AddMethodCallBasedStrictParamTypeRector by @samsonasik in #9156
- refactor: BaseBuilder by @kenjis in #9157
- refactor: improve error message for missing PHP DB extensions by @kenjis in #9160
- refactor: fix typo in BaseConnection.php by @ThomasMeschke in #9170
v4.5.4 (2024-07-27)
- fix: [OCI8] Easy Connect string validation by @kenjis in #9006
- fix: [QueryBuilder] select() with RawSql may cause TypeError by @kenjis in #9009
- fix: [QueryBuilder]
select()does not escape afterNULLby @kenjis in #9010 - fix: allow string as parameter to CURLRequest version by @tangix in #9021
- fix:
spark phpini:checkmay cause TypeError by @kenjis in #9026 - fix: Prevent invalid session handlers by @paulbalandan in #9036
- fix: DebugBar CSS for daisyUI by @kenjis in #9046
- docs:
referreris undefined by @totoprayogo1916 in #9059 - fix: filters passed to the
$routes->group()are not merged into the filters passed to the inner routes by @kenjis in #9064
- refactor: use first class callable on function call by @samsonasik in #9004
- refactor: enable AddClosureVoidReturnTypeWhereNoReturnRector to add void return on closure by @samsonasik in #9008
- refactor: enable AddFunctionVoidReturnTypeWhereNoReturnRector to add void to functions by @samsonasik in #9014
- refactor: Enable phpunit 10 attribute Rector rules by @samsonasik in #9015
- refactor: fix
Throttler::check()$tokens by @paulbalandan in #9067
v4.5.3 (2024-06-25)
- fix:
RedisHandler::deleteMatching()not deleting matching keys if cache prefix is used by @paulbalandan in #8952 - fix: TypeError in DefinedRouteCollector::collect() by @kenjis in #8957
- fix:
migrate:rollback -bdoes not work due to TypeError by @kenjis in #8958 - fix: [Validation]
if_existdoes not work with array data by @kenjis in #8959 - chore: add
Confignamespace to appstarter autoload.psr4 by @kenjis in #8963 - fix:
spark routesmay show BadRequestException when a route has a regexp by @kenjis in #8974 - docs: fix incorrect description for route group filter by @kenjis in #8978
- fix: return and param types of BaseConnection by @paulbalandan in #8983
- fix: precedence of command classes with the same
$nameby @kenjis in #8898 - fix: [OCI8] if conditions to build DSN by @kenjis in #8986
- fix: [Auto Routing Improved] Default Method Fallback does not work with
$translateUriToCamelCaseby @kenjis in #8980 - fix:
command()may executerewrite.phpby @kenjis in #8995
- refactor: BaseBuilder::orderBy() by @kenjis in #8970
- refactor: using phpunit 10 assertObjectHasNotProperty() and assertObjectHasProperty() by @samsonasik in #8991
v4.5.2 (2024-06-10)
- chore: fix phpunit.xml.dist for appstarter by @kenjis in #8785
- fix: update
preload.phpfor 4.5 by @kenjis in #8805 - fix: [ErrorException] Undefined array key in
spark phpini:checkby @kenjis in #8804 - fix: incorrect Security exception message by @kenjis in #8818
- fix: [QueryBuilder] TypeError in join() with BETWEEN by @kenjis in #8792
- fix: [SQLSRV] Query Builder always sets
"<database>"."<schema>".to the table name. by @ping-yee in #8786 - fix: remove unused undefined param $raw in MockCache::save() by @kenjis in #8847
- fix: FileCollection pseudo-regex by @kenjis in #8868
- fix: [Model] casting may throw InvalidArgumentException: Invalid parameter: nullable by @kenjis in #8870
- fix: [Model] casting causes TypeError when finding no record by @kenjis in #8871
- fix: correct property default values in Email by @kenjis in #8855
- fix: CLI::promptByMultipleKeys() and prompt() by @kenjis in #8873
- fix: [Postgres] show missing error message by @kenjis in #8913
- fix: TypeError in number_to_amount() by @kenjis in #8932
- fix: Model::find() returns incorrect data with casting by @kenjis in #8933
- refactor: remove unused path parameter on PhpStreamWrapper::stream_open() by @samsonasik in #8926
v4.5.1 (2024-04-14)
- fix: TypeError in form() by @kenjis in #8736
- fix: [DebugBar] TypeError in Toolbar by @kenjis in #8727
- fix: TypeError when Time is passed to Model by @kenjis in #8738
- docs: added Config\Feature::$oldFilterOrder to app/Config/Feature.php… by @mullernato in #8749
- fix: Factories::get() cannot get defined classes by @kenjis in #8744
- fix:
BaseConnection::escape()does not accept Stringable by @kenjis in #8756 - fix: [CURLRequest]
getHeaderLine('Content-Type')causes InvalidArgumentException by @kenjis in #8760 - fix: [CURLRequest] construct param $config is not used by @kenjis in #8761
- fix: [FileLocator] Cannot declare class XXX, because the name is already in use by @kenjis in #8745
- fix: [DebugBar] Toolbar display may be broken by @kenjis in #8772
- fix: Cannot declare class CodeIgniter\Config\Services, because the name is already in use by @kenjis in #8776
- docs: fix Postgre DSN sample by @kenjis in #8774
- test: refactor Config/Registrar.php by @kenjis in #8731
- test: add return void by @kenjis in #8746
- refactor: system/CLI/BaseCommand.php by @mcsaygili in #8741
- refactor: system/View/Plugins.php by @mcsaygili in #8742
- refactor: fix method name
ValidationErrorsin View\Plugins by @kenjis in #8758 - refactor: system/Debug/Toolbar/Collectors/Routes.php by @mcsaygili in #8751
- refactor: improve error message in BaseExceptionHandler by @kenjis in #8766
- refactor: FabricatorModel by @kenjis in #8770
v4.5.0 (2024-04-07)
- refactor: always use multiple filters by @kenjis in #7903
- fix: update psr/log to v2 and fix Logger interface by @kenjis in #7967
- fix: incorrect return type for Model::objectToRawArray() by @kenjis in #7986
- fix: filter exec order by @kenjis in #7955
- refactor: Remove deprecated Config\Config by @kenjis in #8016
- fix:
FileLocator::findQualifiedNameFromPath()behavior by @kenjis in #8010 - refactor: remove deprecated methods in Model by @kenjis in #8032
- fix: route options are not merged (outer filter is merged with inner filter) by @kenjis in #8033
- fix: route options are not merged (inner filter overrides outer filter) by @kenjis in #7981
- feat: FileLocator caching by @kenjis in #8017
- refactor: remove deprecated properties and methods in CodeIgniter class by @kenjis in #8050
- fix: make Factories final by @kenjis in #8056
- refactor: remove deprecated test classes by @kenjis in #8057
- refactor: make IncomingRequest::$uri protected by @kenjis in #8067
- refactor: remove deprecated spark commands by @kenjis in #8086
- refactor: remove deprecated Request::isValidIP() by @kenjis in #8090
- fix: set_cookie() $expire type by @kenjis in #8080
- fix: remove traditional validation rule param types (1/2) by @kenjis in #8078
- fix: filters are executed when controller does not exist with Auto Routing (Legacy). by @ping-yee in #7925
- fix: remove traditional validation rule param types (2/2) by @kenjis in #8124
- refactor: remove deprecated ModelFactory by @kenjis in #8139
- refactor: remove deprecated properties in Response by @kenjis in #8142
- fix: remove deprecated upper functionality in
Request::getMethod()by @kenjis in #8186 - feat: new Required Filters by @kenjis in #8053
- refactor: remove deprecated CastException exception by @kenjis in #8469
- refactor: remove deprecated MockSecurityConfig by @kenjis in #8472
- refactor: remove deprecated CodeIgniter\Entity by @kenjis in #8497
- refactor: remove deprecated Cache\Exceptions\ExceptionInterface by @kenjis in #8498
- fix: API\ResponseTrait can't return string as JSON by @kenjis in #8490
- feat: Validation::run() accepts DB connection by @kenjis in #8499
- feat: 404 Override sets 404 by default by @kenjis in #8535
- refactor: remove deprecated const SPARKED by @kenjis in #8559
- refactor: remove deprecated BaseService::discoverServices() by @kenjis in #8589
- fix: move Kint loading to Autoloader by @kenjis in #8603
- feat: add Boot class by @kenjis in #8604
- fix: error on
Config\Kintwith Config Caching by @kenjis in #8003 - fix: route key lowercase HTTP verbs by @kenjis in #8235
- fix: use
addHeader()by @kenjis in #8240 - fix: QueryBuilder limit(0) bug by @kenjis in #8280
- fix: SQLite3 may not throw DatabaseException by @kenjis in #8467
- [4.5] fix: DEBUG-VIEW comments are not output by @kenjis in #8523
- [4.5] fix: $db->dateFormat merge by @kenjis in #8539
- [4.5] fix: spark does not work with composer install --no-dev by @kenjis in #8534
- [4.5] fix: Composer autoload.psr4 by @kenjis in #8569
- [4.5] fix: errors when not updating Config\Feature by @kenjis in #8570
- [4.5] fix: TypeError in Filters by @kenjis in #8683
- feat: Language translations finder and update by @neznaika0 in #7896
- feat: domparser - ability to write more advanced expressions by @michalsn in #7946
- feat: [Validation] Callable Rules by @kenjis in #7933
- perf: autoloader by @kenjis in #8005
- feat: db:table shows db config by @kenjis in #7972
- feat: add
{memory_usage}replacement by @kenjis in #8008 - perf: replace $locator->getClassname() with findQualifiedNameFromPath() by @kenjis in #8012
- feat: add Method/Route logging in exceptionHandler() by @kenjis in #8108
- feat: add
config:checkcommand to check Config vaules by @kenjis in #8110 - feat: one generator command could have multiple views by @kenjis in #8119
- feat: improve CLI input testability by @kenjis in #7978
- feat: add ArrayHelper::dotKeyExists() by @kenjis in #8131
- feat: add CSP clearDirective() to clear existing directive by @kenjis in #8220
- feat: [Validation] add
field_existsrule by @kenjis in #8123 - feat: add Message::addHeader() to add header with the same name by @kenjis in #8194
- feat:
spark filter:checkshows "Required Filters" by @kenjis in #8236 - feat: [Commands]
lang:findshow bad keys when scanning (v2) by @neznaika0 in #8285 - feat: add
--dbgroupoption tospark db:tableby @kenjis in #8292 - feat: [Auto Routing Improved] add option to translate uri to camel case by @kenjis in #8321
- feat:
spark routesshows "Required Filters" by @kenjis in #8237 - feat: HTTP method-aware web page caching by @kenjis in #8364
- feat:
spark make:testcreates test files in/tests/directory v2 by @kenjis in #8388 - feat: [Routing] add option to pass multiple URI segments to one Controller parameter by @kenjis in #8348
- feat: add DataConverter to convert types by @kenjis in #8230
- feat: [Model] add option $updateOnlyChanged by @kenjis in #8455
- feat: add event points for spark commands by @kenjis in #8496
- feat: 404 controller also can get PageNotFoundException message by @kenjis in #8491
- feat: add DB config
dateFormatto provide default date/time formats by @kenjis in #8525 - feat: use $db->dateFormat in Model by @kenjis in #8538
- feat: permit __invoke() method as Controller default method by @kenjis in #8533
- feat: add Model field casting by @kenjis in #8243
- feat: add spark command to check php.ini by @kenjis in #8581
- feat: improve Redis Session by @kenjis in #8578
- feat: add Config\Optimize by @kenjis in #8605
- feat: support database name with dots by @kenjis in #8664
- feat: add
spark optimizecommand by @kenjis in #8610 - feat: add CORS filter by @kenjis in #8649
- feat: Support faker modifiers on Fabricator by @paulbalandan in #8671
- feat: environment-specific Config\Security::$redirect by @kenjis in #8673
- feat:
spark config:checkdetects Config Caching by @kenjis in #8711
- Drop PHP 7.4 support by @kenjis in #7924
- [4.5] refactor: remove unused
usein Model by @kenjis in #8045 - [4.5] refactor: remove BaseModel assert() by @kenjis in #8046
- [4.5] refactor: Filters by rector by @kenjis in #8071
- perf: defer instantiation of Validation in Model by @kenjis in #8087
- refactor: fix types by @kenjis in #8091
- refactor: move ArrayHelper class by @kenjis in #8130
- [4.5] refactor: fix types by @kenjis in #8138
- refactor: fix param types by @kenjis in #8175
- refactor: Validation rule field_exists by @kenjis in #8242
- refactor:
TestResponseis now a class of its own by @paulbalandan in #8264 - refactor: fix TypeError in strict mode by @kenjis in #8270
- refactor: add
declare(strict_types=1)by @kenjis in #8072 - refactor: remove deprecated Controller::loadHelpers() by @kenjis in #8286
- refactor: remove deprecated methods in Security by @kenjis in #8287
- refactor: HTTP verbs in Router by @kenjis in #8317
- refactor: remove unused exception classes by @kenjis in #8468
- [4.5] refactor: add
declare(strict_types=1)to ForgeModifyColumnTest by @kenjis in #8502 - [4.5] refactor: use local variables in Model by @kenjis in #8565
- refactor: remove unnecessary BaseService::$services assignment by @kenjis in #8609
- perf: add Factories::get() v2 by @kenjis in #8600
- perf: add Services::get() by @kenjis in #8607
- refactor: remove deprecated items in Request by @kenjis in #8617
- refactor: followup performance
service()by @ddevsr in #8623 - [4.5] refactor: add declare(strict_types=1) in BadRequestException by @kenjis in #8682
- refactor: DB config properties by @kenjis in #8693
- refactor: upgrade to PHP 8.1 with rector by @kenjis in #8354
- refactor: update PHPUnit to 10 by @kenjis in #8069
For the changelog of v4.4, see CHANGELOG_4.4.md.