tag:github.com,2008:https://github.com/cakephp/cakephp/releasesRelease notes from cakephp2026-02-25T04:07:32Ztag:github.com,2008:Repository/656494/5.3.22026-02-25T04:29:45ZCakePHP 5.3.2 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 5.3.2. This is a maintenance release for the 5.3 branch that fixes several community reported issues.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 5.3.2. See the <a href="https://github.com/cakephp/cakephp/compare/5.3.1...5.3.2">changelog</a> for every commit.</p>
<ul>
<li>Improved API documentation.</li>
<li>Fixed incorrect cache key usage within <code>Inflector</code>.</li>
<li>Fixed <code>isset</code> bug in debug output formatters.</li>
<li>Fixed loose equality comparisons.</li>
<li>Made <code>EventInterface</code> template covariant, improving type inference.</li>
<li>Improved performance of DTO projection. Benchmark results show ~70% reduction in DTO mapping overhead.</li>
<li>Add <code>BIT</code> type support to <code>MysqlSchemaDialect</code>. This improves compatibility with existing migrations.</li>
<li>Add support for a <code>fixed</code> option to the <code>binary</code> type in MySQL. This enabled migrations to preserve fixed/variable length binary column types.</li>
<li>Add collation support for uuid columns in MySQL.</li>
<li>Fixed reflection of <code>ON UPDATE CURRENT_TIMESTAMP</code> in MySQL.</li>
<li>Command names are now coloured in help output.</li>
<li><code>PaginatorHelper::limitControl()</code> now preserves passed parameters in the form action.</li>
<li>Updated anchor links in documentation to match new book.cakephp.org site.</li>
<li><code>BelongsToMany::unlink()</code> now returns <code>false</code> if deleting the association link fails.</li>
<li>Improve generic type annotations in several places.</li>
<li><code>QueryException</code> now contains the connection that an error is from to improve debugging of multi-connection applications.</li>
<li>Update to support PHPUnit 13, and continue to adopt Mockery for mocks.</li>
<li>Application rules <code>setError()</code> now handles dotted field paths consistently with other ORM components.</li>
<li>Fix sliding window rate limiter boundary conditions because of rounding down.</li>
<li>Fix compatibility issues with PHP 8.4 and database reflection queries that trigger errors under PHP 8.4's more strict float-to-int coercion.</li>
<li><code>FormHelper</code> will no longer mark fields as required, when they have a callable condition in a <code>allowEmpty*()</code>.</li>
</ul>
<h2>Contributors to 5.3.2</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>ADmad</li>
<li>Jasper Smet</li>
<li>Kevin Pfeifer</li>
<li>kuldeep22somaiya</li>
<li>Marc Würth</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
<li>othercorey</li>
</ul>
<p>As always, we would like to also thank all the contributors that opened issues, or updated the documentation.</p>markstorytag:github.com,2008:Repository/656494/5.2.122026-01-15T03:49:52ZCakePHP 5.2.12 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 5.2.12. This is a security fix release for the 5.2 branch that fixes a security issue with <code>PaginatorHelper</code>. This release is recommended for all applications using <code>PaginatorHelper::limitControl()</code> with CakePHP >= 5.2.10. Earlier releases are not impacted.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 5.2.11. See the <a href="https://github.com/cakephp/cakephp/compare/5.2.11...5.2.12">changelog</a> for every commit.</p>
<ul>
<li>Fixed outputting unescaped HTML generated from request query string data in <code>PaginatorHelper::limitControl()</code>.</li>
</ul>
<h2>Contributors to 5.2.12</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>Mark Story</li>
<li>phpcss-ankue</li>
</ul>
<p>As always, we would like to also thank all the contributors that opened issues, or updated the documentation.</p>markstorytag:github.com,2008:Repository/656494/5.3.12026-01-15T02:47:46ZCakePHP 5.3.1 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 5.3.1. This is a maintenance release for the 5.3 branch that fixes community reported issues, regressions and a security issue with <code>PaginatorHelper</code>.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 5.3.1. See the <a href="https://github.com/cakephp/cakephp/compare/5.3.0...5.3.1">changelog</a> for every commit.</p>
<ul>
<li>Fixed outputting unescaped HTML generated from request query string data in <code>PaginatorHelper::limitControl()</code>.</li>
<li>Fixed plugin template paths.</li>
</ul>
<h2>Contributors to 5.3.1</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>Corey Taylor</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
</ul>
<p>As always, we would like to also thank all the contributors that opened issues, or updated the documentation.</p>markstorytag:github.com,2008:Repository/656494/5.3.02026-01-10T05:29:03ZCakePHP 5.3.0 released<p>The CakePHP core team is happy to announce the release of CakePHP 5.3.0. With the release of 5.3.0, we're ending bugfix support for CakePHP 5.2. Both 5.1 and 5.2 continue to receive security updates until the release of 5.4.0 or 6.0.0. It is also the end of support for bugfixes for CakePHP 4.x. The core team will continue to provide security updates for CakePHP throughout 2026.</p>
<h2>What's new in 5.3.0</h2>
<p>Some highlights of the 5.3.0 release include:</p>
<ul>
<li>Added Redis Cluster support to <code>RedisEngine</code>. Configure the <code>cluster</code> option with an array of server addresses to enable cluster mode.</li>
<li>Several events were added to the Cache package to allow monitoring the caching behavior.</li>
<li><code>cake plugin assets symlink</code> command now supports a <code>--relative</code> option to create relative path symlinks. This is useful when creating symlinks within containers that use volume mounts.</li>
<li><code>cake server</code> now supports a <code>--frankenphp</code> option that will start the development server with <a href="https://frankenphp.dev" rel="nofollow">FrankenPHP</a>.</li>
<li>Added Console <code>TreeHelper</code> which outputs an array as a tree such as an array of filesystem directories as array keys and files as lists under each directory.</li>
<li>Added the ability to group commands in console help output.</li>
<li>New DI container support for the <code>#[Configure]</code> attribute have data injected from <code>Configure</code>, and the <code>TableContainer</code> delegate that lets you inject ORM Tables into your services.</li>
<li>Added support for additional column types in MySQL, and Postgres bringing CakePHP's database type support close to parity with phinx. Queries can also define optimizer hints for engine specific optimizations.</li>
<li>The new <code>RateLimitMiddleware</code> provides configurable rate limiting for your application to protect against abuse and ensure fair usage of resources. It supports multiple identification strategies (IP, user, route, API key), different rate limiting algorithms (sliding window, fixed window, token bucket), and advanced features like custom identifiers, request costs, and dynamic limits.</li>
<li>Added <code>DateTimePeriod</code> which wraps a PHP <code>DatePeriod</code> and returns <code>DateTime</code> instances when iterating.</li>
<li>Added <code>SelectQuery::projectAs()</code> for projecting query results into lightweight Data Transfer Objects (DTOs) for read-only data access.</li>
<li>Added new fluent builders for defining the <code>sortableFields</code> data of your pagination operations. The new builders allow you to define complex sorting for both virtual and real fields, with multi-column and pinned sorting support.</li>
<li>Additional assertions for redirect responses in integration tests.</li>
</ul>
<p>The <a href="https://book.cakephp.org/5/en/appendices/5-3-migration-guide.html" rel="nofollow">migration guide</a> has a complete list of what's new in 5.3.0. We recommend you give that page a read when upgrading as it notes the behavior changes present in 5.3.0.</p>
<h2>Contributors to 5.3.0</h2>
<p>Thank you to all the contributors that have contributed to 5.3.0:</p>
<ul>
<li>ADmad</li>
<li>Alberto G. Rodriguez</li>
<li>Christian</li>
<li>Corey Taylor</li>
<li>Gerson Felipe Schwinn</li>
<li>Jamison Bryant</li>
<li>Jasper Smet</li>
<li>Joris Vaesen</li>
<li>Juhani Aronen</li>
<li>Kevin Pfeifer</li>
<li>Lauri Tunnela</li>
<li>Marcelo Rocha</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
<li>Murl080</li>
<li>Nicos Panayides</li>
<li>othercorey</li>
<li>scribblemaniac</li>
<li>Steve</li>
<li>Umer Salman</li>
<li>Val Bancer</li>
</ul>
<p>As always, a huge thanks to all the community members that helped make this release happen by reporting issues and sending pull requests.</p>markstorytag:github.com,2008:Repository/656494/5.2.112026-01-09T04:38:56ZCakePHP 5.2.11 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 5.2.11. This is a maintenance release for the 5.2 branch that fixes several community reported issues and regressions.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 5.2.11. See the <a href="https://github.com/cakephp/cakephp/compare/5.2.10...5.2.11">changelog</a> for every commit.</p>
<ul>
<li>Fix completion command to exclude plugin-prefixed aliases. By default plugin prefixed commands are not included in the <code>completion</code> command output. Use <code>-v</code> to include all aliases.</li>
<li>Fixed <code>setTimezone()</code> being called on <code>Date</code> instances in <code>RelativeTimeFormatter</code>.</li>
<li>Improve return type annotation for <code>Validator::validate()</code>.</li>
<li>Improved API documentation.</li>
<li><code>E_COMPILE_ERROR</code> errors are not handled as fatal errors in <code>ExceptionTrap::handleShutdown()</code>.</li>
<li>Fix how <code>plugin assets</code> command handles invalid symlinks.</li>
</ul>
<h2>Contributors to 5.2.11</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>ADmad</li>
<li>Gerson Felipe Schwinn</li>
<li>Joris Vaesen</li>
<li>Mark Scherer</li>
<li>othercorey</li>
</ul>
<p>As always, we would like to also thank all the contributors that opened issues, or updated the documentation.</p>markstorytag:github.com,2008:Repository/656494/5.3.0-RC22025-12-14T05:27:40ZCakePHP 5.3.0-RC2 released<p>The CakePHP core team is happy to announce the second release candidate for CakePHP 5.3.0. Since the previous release candidate, the following changes have been made:</p>
<ul>
<li>Added <code>ExistsInNullable</code> rule class to make it easier to create exists in rules that allow nulls.</li>
<li>Bugfixes and Improvements to the rate limiter middleware.</li>
<li>Improved API documentation.</li>
<li><code>SortField</code> treats 'desc' as reverse of the default direction now.</li>
<li>Fixed <code>maxLimit</code> restriction on <code>PaginatorHelper::limitControl()</code>.</li>
<li>Fixed missing type mappings in database schema.</li>
<li>Missing abstract types no longer raise exceptions. Instead a String type is returned.</li>
<li>Loading plugin classes with the class name of <code>Plugin</code> is now deprecated.</li>
<li>Added additional data to cache engine events.</li>
<li>Fixed deserialization error in <code>TableSchema</code>.</li>
<li>Added verbose mode output for the <code>version</code> command.</li>
<li>Improved error messages when a command is missing.</li>
<li>Added <code>Http\RedirectTrait</code> to make it easier to build redirect responses in applications and plugins.</li>
<li><code>Association::__isset()</code> now only checks for associations, to be aligned with <code>__get()</code>.</li>
<li>Commands can now implement the <code>CommandHiddenInterface</code> marker interface to hide a command from command listings.</li>
</ul>
<h2>What's new in 5.3.0</h2>
<p>The <a href="https://book.cakephp.org/5.next/en/appendices/5-3-migration-guide.html" rel="nofollow">migration guide</a> has a complete list of what's new in 5.3.0. We recommend you give that page a read when upgrading as it notes the behavior changes present in 5.3.0.</p>
<h2>How you Can Help</h2>
<p>You can help deliver 5.3.0 by contributing in one of many ways:</p>
<ol>
<li>Check the <a href="https://book.cakephp.org/5.next/en/" rel="nofollow">documentation</a> for mistakes, outdated, unclear or broken examples. We've been trying to update the documentation as we go, but there are likely examples or sections we've missed.</li>
<li>Try it out! Give CakePHP 5.3.0 a test drive. Let us know how upgrading went and if there were any rough spots.</li>
<li>File issues for regressions in existing features, or suggest new features. Even if those features don't make it into 5.3.0, we're early in the process of planning 5.3 and value community feedback.</li>
</ol>
<h2>Contributors to 5.3.0-RC2</h2>
<p>Thank you to all the contributors that have contributed to this release:</p>
<ul>
<li>ADmad</li>
<li>Corey Taylor</li>
<li>Jasper Smet</li>
<li>Kevin Pfeifer</li>
<li>Marcelo Rocha</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
</ul>
<p>As always, a huge thanks to all the community members that helped make this release happen by reporting issues and sending pull requests.</p>markstorytag:github.com,2008:Repository/656494/5.2.102025-12-05T22:42:45ZCakePHP 5.2.10 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 5.2.10. This is a maintenance release for the 5.2 branch that fixes several community reported issues and regressions.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 5.2.10. See the <a href="https://github.com/cakephp/cakephp/compare/5.2.9...5.2.10">changelog</a> for every commit.</p>
<ul>
<li>Fixed <code>Form::getError()</code> using dot notation</li>
<li>Fixed testing <code>FormProtector</code> with <code>IntegrationTestTrait</code> in non-debug mode</li>
<li>Fixed <code>Query::bind()</code> not setting the query dirty</li>
<li>Fixed rendering 400 errors with base template from plugins</li>
<li>Fixed <code>ConsoleIntegrationTestTrait::exec()</code> exception on multiple calls with input</li>
<li>Initialized event manager earlier when running commands so all events are supported</li>
<li>Cleaned up various documentation and annotations</li>
<li>Fixed Chronos deprecations</li>
<li>Fixed PHP 8.5 deprecations</li>
</ul>
<h2>Contributors to 5.2.10</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>ADmad</li>
<li>Alberto G. Rodriguez</li>
<li>Corey Taylor</li>
<li>Jasper Smet</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
<li>nook24</li>
</ul>
<p>As always, we would like to also thank all the contributors that opened issues, or updated the documentation.</p>othercoreytag:github.com,2008:Repository/656494/4.6.32025-12-15T13:00:22ZCakePHP 4.6.3 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 4.6.3. This is a maintenance release for the 4.6 branch that fixes several community reported issues and regressions.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 4.6.3. See the <a href="https://github.com/cakephp/cakephp/compare/4.6.2...4.6.3">changelog</a> for every commit.</p>
<ul>
<li>Fixed PHP 8.4 and 8.5 deprecation warnings.</li>
<li>Fixed queries that use subqueries that already been executed.</li>
<li>Fixed Query::bind() not setting the dirty flag.</li>
<li>Backported Cell action events</li>
<li>Normalize URLs in <code>IntegrationTestTrait::assertRedirect()</code></li>
</ul>
<h2>Contributors to 4.6.3</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>bancer</li>
<li>krugerman007</li>
<li>markstory</li>
<li>othercorey</li>
<li>skie</li>
</ul>othercoreytag:github.com,2008:Repository/656494/5.3.0-RC12025-11-10T07:43:05ZCakePHP 5.3.0-RC1 released<p>The CakePHP core team is happy to announce the first release candidate for CakePHP 5.3.0. The 5.3 release includes several behavior changes to increase correctness and new features. The highlights of those include:</p>
<ul>
<li>Minium PHP version requirement is now PHP 8.2.0.</li>
<li>The Redis cache engine now supports Redis clusters.</li>
<li><code>cake plugin assets symlink</code> command now supports a <code>--relative</code> option to create relative path symlinks.</li>
<li><code>cake server</code> now supports a <code>--frankenphp</code> option that will start the development server with <a href="https://frankenphp.dev/" rel="nofollow">FrankenPHP</a>.</li>
<li>Added <code>Configure</code> attribute to support injecting <code>Configure</code> values into constructor arguments.</li>
<li>Added <code>Query::optimizerHint()</code> which accepts engine-specific optimizer hints.</li>
<li>Added additional database types for <code>year</code>, <code>inet</code>, <code>cidr</code>, and <code>macaddr</code>.</li>
<li>Added <code>Date::getTimestamp()</code>. This method returns an int of the date's timestamp.</li>
<li><code>Table::patchEntity()</code>, <code>Table::newEntity()</code>, <code>Marshaller::one()</code> and <code>Marshaller::many()</code> now accept a <code>strictFields</code> option that only applies validation to the fields listed in the <code>fields</code> option.</li>
<li>Added <code>TableContainer</code> that you can register in your Application::services() to add dependency injection for your Tables.</li>
<li>Added a new fluent interface and value objects for defining sortable fields. The <code>sortableFields</code> option now of <code>Paginator</code> now accepts a callable that receives a <code>SortableFieldsBuilder</code> instance, allowing you to map friendly sort keys to database fields with multi-column sorting and direction control.</li>
<li>Added <code>SortField</code> class for defining sort field configurations with customizable default directions and locked directions, (e.g. <code>SortField::desc('created', locked: true)</code>).</li>
<li>Added support for combined sorting keys in URLs (e.g., <code>?sort=title-asc</code>)</li>
<li><code>assertRedirectBack()</code> and <code>assertRedirectBackToReferer()</code> were added to improve ergonomics of asserting redirects.</li>
<li><code>HtmlHelper::scriptStart()</code> and <code>scriptEnd()</code> now allow simple<br>
wrapping script tags (<code><script>...</script></code>) around inline JavaScript. This enables syntax highlighting in many editors.</li>
<li><code>StringTemplate::addClassNames()</code> was added to provide a more ergonomic way to generate class names.</li>
<li><code>Cake\Http\Middleware\RateLimiterMiddleware</code> was added to provide rate limiting functionality for applications.</li>
</ul>
<h2>What's new in 5.3.0</h2>
<p>The <a href="https://book.cakephp.org/5.next/en/appendices/5-3-migration-guide.html" rel="nofollow">migration guide</a> has a complete list of what's new in 5.3.0. We recommend you give that page a read when upgrading as it notes the behavior changes present in 5.3.0.</p>
<h2>How you Can Help</h2>
<p>You can help deliver 5.3.0 by contributing in one of many ways:</p>
<ol>
<li>Check the <a href="https://book.cakephp.org/5.next/en/" rel="nofollow">documentation</a> for mistakes, outdated, unclear or broken examples. We've been trying to update the documentation as we go, but there are likely examples or sections we've missed.</li>
<li>Try it out! Give CakePHP 5.3.0 a test drive. Let us know how upgrading went and if there were any rough spots.</li>
<li>File issues for regressions in existing features, or suggest new features. Even if those features don't make it into 5.3.0, we're early in the process of planning 5.3 and value community feedback.</li>
</ol>
<h2>Contributors to 5.3.0-RC1</h2>
<p>Thank you to all the contributors that have contributed to this release:</p>
<ul>
<li>ADmad</li>
<li>Alberto G. Rodriguez</li>
<li>Christian</li>
<li>Corey Taylor</li>
<li>Jamison Bryant</li>
<li>Jasper Smet</li>
<li>Juhani Aronen</li>
<li>Kevin Pfeifer</li>
<li>Lauri Tunnela</li>
<li>Marcelo Rocha</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
<li>Murl080</li>
<li>Nicos Panayides</li>
<li>nook24</li>
<li>Steve</li>
<li>Umer Salman</li>
<li>Val Bancer</li>
</ul>
<p>As always, a huge thanks to all the community members that helped make this release happen by reporting issues and sending pull requests.</p>markstorytag:github.com,2008:Repository/656494/5.2.92025-12-05T22:27:25ZCakePHP 5.2.9 released<p>The CakePHP core team is happy to announce the immediate availability of CakePHP 5.2.9. This is a maintenance release for the 5.2 branch that fixes several community reported issues and regressions.</p>
<h2>Bugfixes</h2>
<p>You can expect the following changes in 5.2.9. See the <a href="https://github.com/cakephp/cakephp/compare/5.2.8...5.2.9">changelog</a> for every commit.</p>
<ul>
<li>Improve PHPUnit usage in tests.</li>
<li>Fixed DI integration for Components.</li>
<li>Type annotations for <code>LocatorAwareTrait::fetchTable()</code> have been improved so that IDEs / static analyzer can now recognize the specific table type for the returned value, when the method is called with FQCN.</li>
<li>Fixed default value reflection and for SQLite boolean columns.</li>
<li>Fixed how <code>Socket</code> detects connection interruptions, by deprecating <code>$connected</code> property, and using <code>is_resource()</code> instead. This should improve behavior of <code>SmtpTransport</code> in long running processes.</li>
<li>Improved typehints for <code>SelectQuery</code>.</li>
</ul>
<h2>Contributors to 5.2.9</h2>
<p>Thank you to all the contributors that submitted a pull request:</p>
<ul>
<li>Adam Halfar</li>
<li>ADmad</li>
<li>Alberto Pagliarini</li>
<li>kolorafa</li>
<li>Mark Scherer</li>
<li>Mark Story</li>
</ul>
<p>As always, we would like to also thank all the contributors that opened issues, or updated the documentation.</p>markstory