Stable Release in branch 3.0
3.0.19
Released 25 Nov 2016
(9 years ago)
SoftwareCakePHP
Version3.0
Status
End of life
Supported
PHP versions
PHP 5.6-7.4
Initial release3.0.0
22 Mar 2015
(11 years ago)
Latest release3.0.19
25 Nov 2016
(9 years ago)
End of security fixesUnavailable
Release noteshttps://github.com/cakephp/cakephp/releases/tag/3.0.19
Source codehttps://github.com/cakephp/cakephp/tree/3.0.19
Documentationhttps://book.cakephp.org/3/en/index.html
Downloadhttps://book.cakephp.org/3/en/installation.html
CakePHP 3.0 ReleasesView full list

What Is New in CakePHP 3.0 (Summary)

CakePHP 3.0 is a major overhaul focused on modern PHP practices and increased flexibility. The core changes revolve around adopting namespaces, a new, more powerful ORM, and separated components for better reuse. This foundation makes the framework more decoupled and developer-friendly.

Category Key Changes
New Features PSR-4 namespaces, New ORM (Table/Entity), Stand-alone Components (Http, Database), Improved Flexibility
Improvements Better Static Analysis, Enhanced Code Generation (Bake), Simplified Configuration, New Folder Structure
Deprecated / Removed Old 1.x/2.x APIs, Magic Properties (model->read()), Sanitize Class, Legacy Components
Breaking Changes Namespace for all classes, New method signatures, Different routing defaults, Updated template syntax (.ctp)

Why Did CakePHP 3.0 Switch to Namespaces?

Namespaces were introduced to organize code and avoid class name collisions. Every core class and your application classes now live under a namespace, like App\Controller\ArticlesController. This aligns CakePHP with modern PHP standards and improves autoloading.

In practice, this means you must update all your class declarations and use statements. The old App::uses() method is gone. This change makes the codebase cleaner and works better with IDE tools and Composer.

How Does the New ORM Work?

The Object-Relational Mapping (ORM) layer was completely rewritten for clarity and power. It splits the data layer into Table and Entity objects. The Table class handles queries and business logic, while Entity represents a single row of data.

Key ORM Changes

  • New method names: find(), save(), delete() replace older magic methods.
  • Query objects are now immutable and use a fluent interface for building complex finds.
  • Associations are defined as properties on Table classes, making them more explicit.
  • Behaviors attach to Table objects, not models, and use callable arrays.

What Happened to Controllers and Views?

Controllers lost several magic properties and methods. The $modelClass property is determined by the controller name, and the loadModel() method is used explicitly. View rendering is more straightforward, with the View class becoming a standalone component.

Template files (.ctp) require updated syntax. The old $this->ModelName->field is replaced with $entity->field. Helpers also follow new conventions, and the View block API ($this->fetch()) is the standard for layout blocks.

Are Routing and Configuration Different Now?

Yes, routing defaults changed. The extension parsing is disabled by default, and routes no longer automatically include the plugin, controller, and action keys in pass array. You must define these explicitly if needed.

Configuration files moved from app/Config/ to config/. The database.php config uses a new structure, and the core.php file is gone. Environment variables are encouraged for sensitive data.

FAQ

Is my CakePHP 2.x app broken if I upgrade to 3.0?
Yes, it's a breaking major release. You cannot simply replace files. A full migration is required, rewriting controllers, models, and views to use the new namespaces, ORM, and APIs.

What happened to the Sanitize component?
It was removed. You should rely on proper data binding with the ORM's entity layer or use the HtmlPurifier library for cleaning HTML input. The framework now encourages context-specific escaping in templates.

How do I perform a simple find('list') in 3.0?
Use the new query builder. For example: $articles = $this->Articles->find('list')->toArray();. The find() method now returns a Query object that you can configure before executing.

Can I still use my old custom datasources and behaviors?
They need to be rewritten. Datasources now implement the new Cake\Database\Driver interface, and behaviors attach to Table objects with different method signatures. The plugin system also changed with namespaces.

Why are my form fields not populating data automatically?
The FormHelper in 3.0 uses the context provided by the Form class. Ensure your controller passes an entity to the view and that the form uses the correct entity for data binding. Magic property access ($this->request->data) is less prevalent.

Releases In Branch 3.0

VersionRelease date
3.0.1925 Nov 2016
(9 years ago)
3.0.1828 Mar 2016
(10 years ago)
3.0.1713 Mar 2016
(10 years ago)
3.0.1621 Feb 2016
(10 years ago)
3.0.1505 Nov 2015
(10 years ago)
3.0.1421 Sep 2015
(10 years ago)
3.0.1306 Sep 2015
(10 years ago)
3.0.1221 Aug 2015
(10 years ago)
3.0.1105 Aug 2015
(11 years ago)
3.0.1021 Jul 2015
(11 years ago)
3.0.916 Jul 2015
(11 years ago)
3.0.828 Jun 2015
(11 years ago)
3.0.714 Jun 2015
(11 years ago)
3.0.628 May 2015
(11 years ago)
3.0.517 May 2015
(11 years ago)
3.0.407 May 2015
(11 years ago)
3.0.303 May 2015
(11 years ago)
3.0.219 Apr 2015
(11 years ago)
3.0.104 Apr 2015
(11 years ago)
3.0.022 Mar 2015
(11 years ago)
3.0.0-RC208 Feb 2015
(11 years ago)
3.0.0-RC102 Jan 2015
(11 years ago)
3.0.0-beta316 Nov 2014
(11 years ago)
3.0.0-beta228 Sep 2014
(11 years ago)
3.0.0-beta123 Aug 2014
(11 years ago)
3.0.0-alpha227 Jul 2014
(12 years ago)
3.0.0-alpha125 Jun 2014
(12 years ago)
3.0.0-de306 May 2014
(12 years ago)
3.0.0-de212 Mar 2014
(12 years ago)
3.0.0-de105 Jan 2014
(12 years ago)