3.0 Roadmap

Mark Story edited this page Mar 23, 2015 · 54 revisions

:warning: 3.0.0 was released on March 22, 2015. See the 3.1 Roadmap for future plans.

This roadmap is a general overview of features and when they are currently planned for. This list is tentative and subject to change. If you are looking for more thought out ideas consult the list of open issues for 3.0

Highlevel goals of CakePHP 3.0

CakePHP 3.0 represents a significant break in backwards compatibility. One of the largest the project has ever had. We are trying to modify existing methods and classes only where it is required. However, modernizing the ORM has caused a significant ripple effect in other parts of the framework. When making changes we are working towards a few goals:

  • Adopt broader PHP community standards. Tools like composer, and PSR-0, PSR-1 have proven to be useful tools for improving interoperability. CakePHP should embrace these community standards where possible.
  • Increase modularity. CakePHP has had history of being tightly coupled. We're trying to reduce coupling and make more standalone libraries. For example the new Collections library, and Events system have no dependencies on the rest of the framework.
  • Use PHP 5.4. When we started on CakePHP 3.0, this seemed ambitious. However, with the release of PHP 5.5, and impending release of PHP 5.6, it feels right on target now.
  • Modernize and simplify the framework. CakePHP has accumulated numerous features over the years. By removing some features that are better implemented as plugins we make CakePHP simpler and smaller for everyone. Separating features into plugins allows greater community involvement and more rapid iteration on features.

Possible release schedule

  • 3.0.0-dev1
    • Basic ORM functionality complete
    • pagination working
    • old code removed.
  • 3.0.0-dev2
    • FormHelper
    • TranslateBehavior
    • more ORM improvements
  • 3.0.0-dev3
    • Bake and other console tools like ExtractTask working again.
    • TreeBehavior rebuilt.
    • New unified config() methods
    • SQLserver support added.
    • Console framework improvements and streamlining.
    • View cells added.
    • ORM bug fixes.
    • Cake\Utility\Time rebuilt and no longer using static methods.
    • Carbon used internally.
    • Intl dependency added for localizing datetimes.
  • 3.0.0-alpha1
    • Sessions not static.
    • Middleware rebuilt.
    • Plugins and themes merged.
    • CookieComponent reworked.
  • 3.0.0-alpha2
    • Router scopes added.
    • Router performance improvements.
    • Documentation mostly current & abugfixes.
    • Cache Middleware replaces CacheHelper
  • 3.0.0-beta1
    • Feedback from dev & alpha releases incorporated.
    • Overhaul i18n to use intl and add support for i18n engines (maybe using https://github.com/symfony/Translation).
    • vendor prefixed plugin fixes.
    • Numerous bugfixes.
  • 3.0.0-beta2
    • Bugfixes and performance optimizations.
    • Shell namespaces renamed.
    • Console/cake moved to bin/cake.
    • Classes renamed to make creating sub packages easier.
    • IntergrationTestCase added to replace ControllerTestCase.
    • Migrations plugin complete.
    • Debugkit updated
  • 3.0.0-beta3
    • Bugfixes and optimizations
    • initialize() hook methods.
    • Component::beforeFilter()
    • checkboxes and radio buttons nested by default.
    • Database, Email, Log, Cache now accept DSN config data.
    • Standalone libraries extracted.
    • Request::is() caches results.
  • 3.0.0-RC1
    • Bugfixes and performance optimizations.
    • Improve error page designs.
    • Validation and Integrity checks separated.
    • Bake separated into a plugin.
    • ORM-less Forms added.
    • Class aliases from betas removed.
    • Documentation re-structured and made less verbose.
    • Adopt PSR-2?
  • 3.0.0-RC2
    • Documentation complete. Migrations, Crud, Acl, Upgrade plugins updated.
  • 3.0.0 stable - Yay!
  • Post 3.0.0 - Talk to other popular plugins and help them update.

See the issue list for the set of issues that are still required for the next milestone release.

Completed

  • [✓] Drop support for PHP 5.2.x.
  • [✓] Only support PHP 5.4.0+.
  • [✓] Add namespaces.
  • [✓] Finish PSR0 implementation.
  • [✓] Implement PSR1
  • [✓] Router changes: mark_story
    • [✓] Remove named parameters
    • [✓] Add support for named routes as a method to optimize reverse routing.
    • [✓] Add improved routing prefixes. Use namespaced classes instead of prefixed methods. e.g App\Controller\Admin\PostsController::index().
  • Re-write model layer:
    • [✓] New connection layer using PDO as a base. Also support native drivers where required.
    • [✓] New query builder objects that support fluent query building.
    • [✓] Prepared statement abstraction for native/pdo drivers.
    • [✓] Enhanced richer datatype system that provides a pluggable type system allowing features like MongoDate to easily be integrated, or custom types for specific databases.
    • [✓] Return objects from queries.
    • [✓] Fix frankenstein API. Provide cleaner separation between record/entity and table/collection objects/concepts.
    • [✓] Expose a richer query API.
  • [✓] Improve bootstrapping process to allow app developers more/full control.
  • [✓] Use composer for installing CakePHP.
  • [✓] Provide a way to create new applications using composer's create-project command.
  • [✓] Remove compatibility layers for the event system. markstory
    • [✓] Remove ObjectCollection::trigger() in favour directly using the event system. markstory
  • [✓] Remove logging parameter backwards compatibility. markstory
  • [✓] Rewrite HttpSocket. Better use PHP api's and support file uploads. markstory
  • [✓] Extract a request object in HttpSocket.
  • [✓] Remove JsHelper and associated code.ADmad
  • [✓] Streamline events system. Remove features like 'break', 'breakOn', 'collectReturn' and 'modParams'. markstory

Controller & components

  • [✓] Remove Scaffold.
  • [✓] figure out how the CRUD plugin could be integrated as an optional package to provide dynamic scaffolding?
  • [✓] Remove deprecated features.
  • [✓] Replace loadModel() it needs to load the new Table objects.
  • [✓] Come up with new skeleton code for controller actions, documentation and bake will need to be updated.
  • [✓] CookieComponent - is more than a bit stupid. It can only handle one cookie at a time. Make it more flexible or expose encrypted cookies and nested data as part of the request/response objects.
  • [✓] Use bcrypt as the default password hashing algorithm in AuthComponent. ADmad
  • [✓] Rebuild Dispatcher filters, use a system that works with objects instead of configuration data.
  • [✓] Consolidate settings in components similar to behaviors: Only use config array and drop the redundant attributes.

Model & behaviors

  • [✓] Have the Table objects return Entities, that allow lazy queries to associations.
  • [✓] Make saving use transactions by default
  • [✓] Entities should keep a list of properties that where changed so saving only updates the diff
  • [✓] Save-all that will work by saving an object graph of hydrated entities
  • [✓] Rebuild Behaviors. Mark has started some thoughts on a wiki page, but it needs more work.
    • [✓] Behaviors should integrate with the table class and be able to provide custom finders.
    • [✓] Figure out how to handle validation callbacks.
  • [✓] Move session code into a top level package, or under Network?. It makes 0 sense where it currently is. ADmad

Plugin

  • [✓] Merge plugins and themes. Themes need to have helpers and possibly locale files in order to meet the needs of CMS/multi-tenant applications. Merging themes and plugins will improve consistency and reduce the number of extension points providing greater cohesion.
  • Replace App::objects() it is full of lies.

Utility

View & helpers

  • [✓] Make HtmlHelper use the same placeholder and template features as PaginatorHelper. markstory
  • [✓] Rewrite PaginatorHelper HTML generation. Always return a consistent number of HTML elements for pagination links. The goal is to make working with CSS frameworks simpler, and require fewer options. markstory
  • [✓] Update FormHelper HTML generation to reflect a similar implementation as that in PaginatorHelper.
  • [✓] FormHelper is a mess propose a new replacement. Focus on simple to use API, that uses templates instead of mountains of options. Perhaps look at Aura.Form or how other frameworks like django handle form generation as well.
  • [✓] Update reflection functions in FormHelper to work with the new model layer
  • [✓] FormHelper should take an entity or list of entities as an alternative to $this->request->data

Console

  • [ x ] Rebuild SchemaShell - Schema shell has been removed from CakePHP for 3.0.0, instead a plugin will be developed separately.
  • [✓] Remove the AclShell. DbAcl will moved into a plugin?
  • [✓] Update Bake
    • [✓] Update to use new prefixes, models and tests.
  • [✓] Remove test shell? Should we do this? We could move Test cases to the top level directory and just use phpunit's test runner. Explore how this would impact the webrunner.