CakePHP 3.9 is an API compatible upgrade from 3.8. This page outlines the changes and improvements made.
To upgrade to 3.9.x run the following composer command:
php composer.phar require --update-with-dependencies "cakephp/cakephp:3.9.*"
error()will no longer accept
nullvalues in the
messageparameter in 4.0.
$fixturesin test cases is deprecated. Instead use an array, or implement the new
getFixtures()method on your test case classes.
Validator::errors()was renamed to
FormHelper::create()now emits deprecation warnings when the
$contextparameter is a boolean or string. These values trigger fatal errors in 4.0 and will need to be updated before upgrading.
FunctionBuilder::cast([...])is deprecated. Use
zendframeworkpackage has been replaced with laminas which provides backwards-compatible classes.
add()no longer cap duration to 30 days. Instead all expiration values are forwarded to memcache.
defaultName()method to overwrite the conventions based CLI name.
Driver::newTableSchema()was added. This hook method lets you customize which the class used for schema metadata.
Query::orderDesc()now accept Closure’s as their field enabling you to use build complex order expressions with the provided
Cake\Datasource\SimplePaginatorwas added. This class makes paginating very large results more efficient. It skips running the potentially expensive
count()query. If you only use ‘next’ and ‘previous’ navigation in your pagination controls this class can be a good solution.
Cake\Http\Client\Response::isSuccess()was backported from 4.0
Cake\Http\Middleware\CspMiddlewarewas backported from 4.0
BaseApplication::addOptionalPlugin()was added. This method handles loading plugins, and handling errors for plugins that may not exist because they are dev dependencies.
Number::setDefaultCurrencyFormat()were added. These methods let you define the formatting style for currency values.
FrozenDatenow accepts a callable that can be used to return a custom string.
disableLenientParsing(). The default is enabled - the same as IntlDateFormatter.
Table::saveManyOrFail()method has been added that will throw
PersistenceFailedExceptionwith the specific entity that failed in case of an error. The entities are saved within a transaction.
Table::deleteManyOrFail()methods have been added for removing many entities at once including callbacks. The entities are removed within a transaction.
TableLocator::clear()now resets the internal
Query::clearResult()was added. This method lets you remove the result from a query so you can re-execute it.
TestCase::getFixtures()was added. This method lets you generate your fixture list using application specific logic if necessary.
$keyPathparameter. Providing null will result in a numerically indexed output array.
Hash::sort()now accepts the
SORT_DESCconstants in the direction parameter.
random_int()with PHP 5.6 insted of
mt_rand(). This adds a dependency on paragonie/random_compat which implements it for PHP 5.6.
UploadedFileInterfaceobjects that have
UPLOAD_ERR_NO_FILEas their error code to be empty.
Validator::notAlphaNumeric()were backported from 4.x.
Validator::asciiAlphaNumeric()were backported from 4.x.
Validator::notAsciiAlphaNumeric()were backported from 4.x.
selectedClasstemplate variable added. This template key controls the class name used when a radio or checkbox is selected.
TextHelper::slug()was backported from 4.0.