Stable Release in branch 4.2
4.2.12
Released 06 Jan 2023
(3 years ago)
SoftwareCakePHP
Version4.2
Status
End of life
Supported
PHP versions
PHP 7.2+
Initial release4.2.0
20 Dec 2020
(5 years ago)
Latest release4.2.12
06 Jan 2023
(3 years ago)
End of security fixes09 Sep 2023
(Ended 2 years ago)
Release noteshttps://github.com/cakephp/cakephp/releases/tag/4.2.12
Source codehttps://github.com/cakephp/cakephp/tree/4.2.12
Documentationhttps://book.cakephp.org/4/en/index.html
Downloadhttps://book.cakephp.org/4/en/installation.html
CakePHP 4.2 ReleasesView full list

What Is New in CakePHP 4.2

CakePHP 4.2 is an incremental release packed with quality-of-life improvements, new features for modern development, and the usual round of deprecations to keep the framework lean. Here's a quick summary of the key changes.

Category Key Changes
New Features New Command::SUCCESS and Command::FAILURE constants, PluginInterface, and disableNativePHPUnitErrorHandler() method.
Improvements Better CLI output colors on Windows, improved QueryExpression::case() type-hinting, and enhanced TestSuite configuration.
Bug Fixes Fixes for Table::findOrCreate(), validation in UploadedFile, and ServerRequest file parsing.
Deprecated Global constants for console exit codes (CODE_SUCCESS, CODE_ERROR), Plugin::routes() hook, and Helper::config().
Developer Experience Clearer deprecation warnings and streamlined plugin architecture with the new interface.

Why are console exit codes changing in CakePHP 4.2?

The old global constants CODE_SUCCESS and CODE_ERROR are deprecated in favor of new class constants on the Command base class: Command::SUCCESS and Command::FAILURE. This change aligns CakePHP with common PHP console standards and improves code organization.

In practice, you should update your shell commands and tasks to return these new constants. The old ones still work but will trigger deprecation warnings, giving you time to migrate.

// Old way (deprecated)
return CODE_SUCCESS;

// New way in 4.2
use Cake\Console\Command;
return Command::SUCCESS;

How does the new PluginInterface improve my setup?

CakePHP 4.2 introduces a Cake\Core\PluginInterface to provide a more formal, testable contract for plugins. This matters because it moves plugin bootstrapping away from magic methods and into explicit, injectable objects.

The Plugin::routes() hook is now deprecated. Instead, plugins should use the PluginInterface::routes() method or load routes via their Application class hook. This shift makes application composition clearer and is a step towards full dependency injection for plugins.

What database query improvements were made?

Type-hinting for the QueryExpression::case() method has been significantly improved. The $values parameter now properly accepts an array, and the $type parameter is explicitly typed, catching potential errors during development instead of at runtime.

This is a typical CakePHP refinement--small tweaks that make the ORM more predictable and your IDE's autocompletion more accurate. It helps avoid subtle bugs when building complex conditional queries.

Are there any changes to testing or error handling?

Yes. A new method disableNativePHPUnitErrorHandler() is available in the TestSuite class. This gives you finer control over how PHPUnit manages errors during test runs, which is useful when debugging specific error conditions in your integration tests.

Additionally, the UploadedFile class received a fix where validation rules were not being applied when the file upload field was optional but present. This fix ensures validation behaves consistently across different form scenarios.

FAQ

What should I immediately change when upgrading to CakePHP 4.2?
Update your console commands to use Command::SUCCESS and Command::FAILURE. Also, check if your plugins use the deprecated Plugin::routes() method and plan to move that logic.

Is the Helper::config() method removal a breaking change?
No, it's deprecated in 4.2 but not removed. You'll see deprecation warnings. Start using the getConfig() and setConfig() methods instead for better consistency with other framework classes.

Why was the Windows CLI color support improved?
Because Windows terminal support for ANSI colors has become much more reliable in recent years. CakePHP now leverages this, making ConsoleOutput more readable and visually consistent for developers on Windows machines.

What's the deal with the findOrCreate() fix?
There was a bug where Table::findOrCreate() could fail in specific transaction scenarios. The fix ensures it works correctly within existing transactional boundaries, which is crucial for data integrity.

Should I implement PluginInterface in my plugins now?
It's a good forward-looking practice. While the old Plugin class still works, implementing the interface prepares your plugin for future versions of CakePHP and makes its bootstrap process more explicit and testable.

Releases In Branch 4.2

VersionRelease date
4.2.1206 Jan 2023
(3 years ago)
4.2.1105 Jan 2023
(3 years ago)
4.2.1013 Oct 2021
(4 years ago)
4.2.910 Sep 2021
(4 years ago)
4.2.816 Jul 2021
(5 years ago)
4.2.716 Jun 2021
(5 years ago)
4.2.605 May 2021
(5 years ago)
4.2.502 Apr 2021
(5 years ago)
4.2.427 Feb 2021
(5 years ago)
4.2.324 Jan 2021
(5 years ago)
4.2.206 Jan 2021
(5 years ago)
4.2.126 Dec 2020
(5 years ago)
4.2.020 Dec 2020
(5 years ago)
4.2.0-RC129 Nov 2020
(5 years ago)
4.2.0-beta101 Nov 2020
(5 years ago)