Today, we will focus on what we need to do to get CakePHP 1.3 application upgraded to CakePHP 2.2.3-the latest official stable release
Installation
This is pretty straight forward, same as CakePHP 1.3 version.
Download and unzip the CakePHP 2.2.3 and follow these below-mentioned 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.
If you are using “email” as your login field name
CakePHP 1.3: (inside AppController beforeFilter)
$this->Auth->fields = array('username' => 'email', 'password' => 'passw
CakePHP 2.2.3: (inside AppController beforeFilter)
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email', 'password' => 'password')));
Auth Login
CakePHP 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.
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%'')));