{"id":28478,"date":"2018-04-17T11:40:19","date_gmt":"2018-04-17T09:40:19","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28478"},"modified":"2018-04-17T11:40:19","modified_gmt":"2018-04-17T09:40:19","slug":"cakephp-3-6-0-release","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/17\/cakephp-3-6-0-release\/","title":{"rendered":"CakePHP 3.6.0 release"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>My all time favorite PHP framework &#8211; <a href=\"https:\/\/cakephp.org\/\">CakePHP<\/a> has recently announced the availability of the long awaited <a href=\"https:\/\/bakery.cakephp.org\/2018\/04\/14\/cakephp_360_released.html\">version 3.6.0<\/a>.\u00a0 What&#8217;s so special about this particular version? &#8211; those of you not very familiar with CakePHP might ask.\u00a0 And I&#8217;ll tell you.<\/p>\n<p>CakePHP is a well established framework, with <a href=\"https:\/\/en.wikipedia.org\/wiki\/CakePHP\">long history<\/a> &#8211; going strong for 13 years now (initial release was in April of 2005).\u00a0 In web development, 13 years is a very long time.\u00a0 Old tools fade away. New versions of the language and popular libraries come into play.\u00a0 And it&#8217;s the job of the framework to change and adjust smoothly, providing the developer with the best and greatest, without breaking applications.\u00a0 That&#8217;s not an easy task &#8211; ask anybody who had to maintain any codebase for longer than a couple of years.<\/p>\n<p>I started using CakePHP back in 2007-2008 or so.\u00a0 It was version 1.x and it was great.\u00a0 At the time.\u00a0 Then, a few years later, version 2.x was released, and as a major releases often do, it broke backward compatibility.\u00a0 The most painful change at the time was still easy to fix &#8211; it was the change in the naming convention for folders, files, and classes.\u00a0 CakePHP 2.x switched from their own naming convention to the <a href=\"https:\/\/www.php-fig.org\/psr\/psr-2\/\">PSR-2 Coding Style<\/a>.<\/p>\n<p>About 4 years ago, CakePHP 3.x was released, and this time it was the major of the major releases.\u00a0 CakePHP framework got a lot better (and I do mean A LOT), but the price was an impossible migration.\u00a0 One of the big changes in that version was the complete rewrite of the model layer and the ORM, which meant moving the CakePHP application from version 2.x to 3.x meant an almost complete rewrite (as most applications have most of the code in the model layer anyway).<\/p>\n<p>That was a huge pain and community reacted.\u00a0 Everybody wanted to use the cool new features of CakePHP 3, but nobody could afford to rewrite almost all of the application for this version of the framework.\u00a0 (By the way, this situation is not unique to CakePHP &#8211; pretty much all other frameworks, both in PHP and other languages, either faced it or will face it in the future &#8211; that&#8217;s just how things are done).<\/p>\n<p>When the CakePHP 4 roadmap was announced, one of the first things that CakePHP core developers team addressed was the upgrade path.\u00a0 From the start they said that there must be a better way to handle major upgrades of the framework, and that they will find it.\u00a0 And they did!<\/p>\n<p>This time around, there was some ground work laid out.\u00a0 Instead of just dropping another major release into developers&#8217; laps and all the upgrade pain that comes with it, CakePHP developers absorbed a lot of it on their end, and softened the transition.\u00a0 How did they do it?<\/p>\n<p>Well, that&#8217;s where we get to the exciting CakePHP 3.6.0 release!\u00a0 You see, the plan was do provide the gradual transition and give developers warnings and time to adjust their applications.\u00a0 From the early stages of the CakePHP 3.x, a lot of functionality was commented as deprecated.\u00a0 Any developer building with CakePHP framework could easily find what&#8217;s gonna go in the next major release.\u00a0 But developers are always busy and never have the time for looking up things.\u00a0 So what CakePHP 3.6.0 does is quite elegant.\u00a0 It introduces deprecated warnings for all the functionality that will be removed in CakePHP 4.\u00a0 This means that once you upgrade to CakePHP 3.6.0 your logs will get a lot noisier, telling you exactly what needs fixing.\u00a0 If you don&#8217;t have the time right now, or want to ignore these warnings for now, you can simply disable them by adjusting the error reporting configuration, and all works as before.\u00a0 But if you want to get ready for the next major version of CakePHP, then you have precise information of what needs to be fixed in your application.\u00a0 Fixing one issue at a time, when you have the time, is great!<\/p>\n<p>In fact, <a href=\"https:\/\/qobrix.com\/\">at work<\/a>, we loved this approach so much that we started using it for our own projects as well.\u00a0 Switching between different projects across several developers, and working on some old projects, etc., makes things difficult to remember.\u00a0 With deprecated warnings, things are a lot simpler.<\/p>\n<p>So, ladies and gentlemen, if you were looking for a framework to try, give CakePHP 3.6.0 a go.\u00a0 You&#8217;ll easily upgrade to CakePHP 4 when it becomes available.\u00a0 And if you were already using CakePHP 3, upgrade to CakePHP 3.6.0 and check your logs for deprecated warnings.<\/p>\n<p>And, of course, stay tuned for <a href=\"https:\/\/bakery.cakephp.org\/2017\/06\/23\/upcoming-cakephp-roadmap.html\">CakePHP 4<\/a>!<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>My all time favorite PHP framework &#8211; CakePHP has recently announced the availability of the long awaited version 3.6.0.\u00a0 What&#8217;s so special about this particular version? &#8211; those of you not very familiar with CakePHP might ask.\u00a0 And I&#8217;ll tell you. CakePHP is a well established framework, with long history &#8211; going strong for 13 &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/17\/cakephp-3-6-0-release\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">CakePHP 3.6.0 release<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"CakePHP 3.6.0 release #WebDev #PHP #CakePHP #frameworks #releases #milestones","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[3069,1537,991,38,1529,1330],"keyring_services":[],"class_list":["post-28478","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-best-practices","tag-cakephp","tag-milestones","tag-php","tag-releases","tag-web-development"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":27851,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/08\/15\/cakephp-events-system\/","url_meta":{"origin":28478,"position":0},"title":"CakePHP Events System","author":"Leonid Mamchenkov","date":"August 15, 2017","format":false,"excerpt":"Events are a great way to separate the business logic of your application and make things simpler and, often, faster. \u00a0CakePHP framework introduced an events system in version 2.1, and since then it got much better. \u00a0The official documentation covers current implementation pretty well. \u00a0But in this post I wanted\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":24952,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/11\/10\/cakephp-3-cheatsheet\/","url_meta":{"origin":28478,"position":1},"title":"CakePHP 3 Cheatsheet","author":"Leonid Mamchenkov","date":"November 10, 2015","format":false,"excerpt":"CakePHP 3 Cheatsheet - a handy collection of code snippets for anyone new to CakePHP 3 framework and all the changes that went into this version.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27886,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/08\/31\/cakephp-with-nightwatchjs-on-travis-ci\/","url_meta":{"origin":28478,"position":2},"title":"CakePHP with NightwatchJS on Travis CI","author":"Leonid Mamchenkov","date":"August 31, 2017","format":false,"excerpt":"My colleague Andrey Vystavkin has been setting up a testing environment for our CakePHP projects recently. \u00a0We had one before, of course, using PHPUnit. \u00a0But this time we wanted to add Google Chrome headless browser with some form of JavaScript test suite, so that we could cover functional tests and\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":15740,"url":"https:\/\/mamchenkov.net\/wordpress\/2011\/10\/18\/cakephp-2-0-released\/","url_meta":{"origin":28478,"position":3},"title":"CakePHP 2.0 released!","author":"Leonid Mamchenkov","date":"October 18, 2011","format":false,"excerpt":"I've been a bit all over the place these last few days, but I knew that this was coming shortly - CakePHP team released the new and much improved version 2.0 a couple of days ago. There are a lot of changes. And I do mean a lot. Here are\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":22103,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/07\/01\/cakephp-3-here-we-go-again\/","url_meta":{"origin":28478,"position":4},"title":"CakePHP 3, here we go again.","author":"Leonid Mamchenkov","date":"July 1, 2014","format":false,"excerpt":"As some of you might know, I'm a big fan of CakePHP framework. \u00a0I've used it on numerous projects since the beginning of times. \u00a0I've built projects small and large, migrated existing native PHP codebases to CakePHP and even survived a few major CakePHP upgrades - 1.2 to 2.0 comes\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27717,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/06\/22\/phinx-joins-cakephp\/","url_meta":{"origin":28478,"position":5},"title":"Phinx joins CakePHP!","author":"Leonid Mamchenkov","date":"June 22, 2017","format":false,"excerpt":"These are some really good news - Phinx joins CakePHP family! \u00a0If you are from a different technology stack and not familiar with these, Phinx is an excellent database migrations tool, which has been used by CakePHP framework for a while now. \u00a0The two worked great together. \u00a0Now that they\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28478"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28478\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28478"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}