3

Click here to load reader

How to migrate Cakephp 1.x to 2.x

Embed Size (px)

Citation preview

Page 1: How to migrate Cakephp 1.x to 2.x

How to migrate CakePHP 1.x to 2.x

Keyword: CakePHP development, CakePHP 2.0, CakePHP migration

We will focus on what we need to do to get CakePHP 1.3 application upgraded to CakePHP 2.2.3CakePHP 2.2.3 is the latest stable version now.

Installation• This is pretty straight forward, same as CakePHP 1.3 version.• Download and unzip the CalePHP 2.2.3 and follow the instructions.

Configuration• core.php

• Make sure to copy the security.salt and Security.cipher_seed from your old core.php• Take notice of how errors, sessions and caching have changed.

• database.php• There is a minor change on this file,• CakePHP 1.3: 'driver' => 'mysqli'• CakePHP 2.2.3: 'datasource' => 'Database/Mysql'

• routes.php• Don't overwrite this file with your older one.• You can place your custom routes before or after CakePlugin::routes()

• bootstrap.php• Copy all functions, constants and other code from your old bootstrap into the new one.

Folder Structure• The cake folder is now inside lib folder. There is nothing to do with this.• Files and folders are now CamelCased instead of lower_underscored

• Example: The “users” folder inside the View becomes “Users”• The controller files are now UsersController.php instead of users_controller.php

• project_user_controller.php becomes “ProjectUsersController.php”• The model files are now User.php instead of user.php

• project_user.php model becomes “ProjectUser.php”• The components files are now FormatComponent.php instead of format.php

• The helpers files are now DatetimeHelper.php instead of datetime.php

Moved APP files• The parent app_classes have been moved and renamed as well. • Instead of app_controller.php, app_model.php, and app_helper.php now become

Controller/AppController.php, Model/AppModel.php, and View/Helper/AppHelper.php.

Auth Component and Login

• Auth now supports multiple authorization adapters that can all be used together• Cake 1.3.x was automatically checking if user has correctly entered username/password

inside your login() method of users_controller but in cake 2.x we need to manually call $this->Auth->login() this returns boolean value based on successful login or failure.

Page 2: How to migrate Cakephp 1.x to 2.x

If you are using “email” as your login field nameCakePHP 1.3: (inside AppController beforeFilter)

$this->Auth->fields = array('username' => 'email', 'password' => 'password');

CakePHP 2.2.3: (inside AppController beforeFilter)

$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email', 'password' => 'password')));

Auth LoginCakePHP 2.2.3: (inside UsersController login function)

if (!empty($this->request->data)) { if ($this->Auth->login()) { $this->redirect($this->Auth->redirect()); } else { //$this->Session->setFlash('Your Email or Password was

incorrect.'); } }

• CakePHP 2.x auth automatically hashes the password on login but not on save.

We can add a beforeSave() method on the User model to hash the password.public function beforeSave($options = array()){ $this->data['User']['password'] = AuthComponent::password($this-

>data['User']['password']); return true; }

Request Data• CakePHP 2.0 has done some request related changes. • The Request Object does not have “form” element any longer.• You will need to replace $this->params['form'] with $this->request['data'] or $this-

>request->data.• $this->data needs to be replaced with $this->request->data• So, now we can use $this->request->data on both form submit and AJAX post.

• Now, we need to check !empty($this->request->data) instead of “!empty($this->data)” while saving a form.

Views Changes• Use $this->Html->link() instead of $html->link()• Use $this->Form-> instead of $form->• Use $this->Session-> instead of $session->• Use $this->Paginator-> intead of $paginator ->• For JavaScript inclusion use $this->Html->script(“”) instead of $javascript->link()

Moved Email Elements• Email elements have been moved from views/elements to View/Emails.

Page 3: How to migrate Cakephp 1.x to 2.x

Helpers• The Ajax, Javascript, and XML helpers have been removed. You will need to replace these

helper calls with appropriate alternatives• Helpers can no longer be called with “$helper->function()”. You need to update your helper

calls to use $this->Helper->function()• If you are loading or importing your helpers inside another custom helper or component,

• $myhelper = new DatetimeHelper() becomes $myhelper = new DatetimeHelper($this->_View) or $myhelper = new DatetimeHelper(new View(null))

Components• All component files should be extended by Component Class instead of Object

DB and Code Caution• There is no Enum Support in cakephp2.x as sql server doesnt have similar datatype.

• You can change enum to tinyint(2)• In cake 1.3 used tinyint(1) for is_active database fields.

• While retrieveing from database it returns 0/1

• But, cakePHP2.x no longer returns as 0. This will return bool(true) /bool(false)• Boolean column values will be casted to php native boolean type automatically.

__() Function and Pagination• The __() function no longer has the option to echo. It always returns • Change the Pagination code,

• CakePHP 1.3:• echo $this->Paginator->counter(array( 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%'', true)));

• CakePHP 2.2.3:• echo $this->Paginator->counter(array( 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%'')));