Hello!!! After a little hack, we are again back. It is the time to be rude, are you ready for CRUD? I am ready. If you are not ready please read previous tutorial. Yes, in this tutorial we will do Create, Read, Update and Delete (CRUD) with CakePHP.
CRUD is very important operation of learning any framework. Expert says, if you can run CRUD, you already know 50% of the framework. Rest of the 50% you will learn by time and practice. So, in this tutorial we will complete 50% of the CakePHP. I am really really excited. One good thing is, you already familiar with some code. So, what to fear!!!
Step 1:
First create a database called cakedb from the following script. You can do it through your phpmyadmin, very easily.
-- -- Database: `cakedb` -- CREATE DATABASE `cakedb`; USE `cakedb`; -- -------------------------------------------------------- -- -- Table structure for table `posts` -- CREATE TABLE IF NOT EXISTS `posts` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(50) DEFAULT NULL, `body` text, `funnypost` tinyint(1) DEFAULT NULL, `seriouspost` tinyint(1) DEFAULT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Step 2:
Now create a new project folder called cakephp24 with your CakePHP download and place it to your htdocs folder. Give a secret salt for your application in app/config/core.php
/** * A random string used in security hashing methods. */ Configure::write('Security.salt', 'ShahjalalHossain'); /** * A random numeric string (digits only) used to encrypt/decrypt strings. */ Configure::write('Security.cipherSeed', 'ShahjalalHossain');
Step 3:
Now rename database.php.default to database.php and configure for your database from app/config/ folder.
public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'cakedb', 'prefix' => '', //'encoding' => 'utf8', );
Means, we are all set. It is time to write some code for CakePHP.
Step 4:
Now we will create our model, view and controller for our CRUD application.
Model:
First create a model for our application. This will be an empty model. Don’t worry, everything will work, just fine. Now create Post.php inside app/Model folder.
<?php App::uses('AppModel', 'Model'); /** * Post Model * */ class Post extends AppModel { }
Controller:
Usually, controller is the conjunction between Model and View. According to the naming convention, create app/Controller/PostsController.php.
<?php App::uses('AppController', 'Controller'); /** * Posts Controller */ class PostsController extends AppController { /** * Components */ public $components = array('Paginator'); /** * index method */ public function index() { $this->Post->recursive = 0; $this->set('posts', $this->Paginator->paginate()); } /** * view method * */ public function view($id = null) { if (!$this->Post->exists($id)) { throw new NotFoundException(__('Invalid post')); } $options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id)); $this->set('post', $this->Post->find('first', $options)); } /** * add method */ public function add() { if ($this->request->is('post')) { $this->Post->create(); if ($this->Post->save($this->request->data)) { $this->Session->setFlash(__('The post has been saved.')); return $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The post could not be saved. Please, try again.')); } } } /** * edit method */ public function edit($id = null) { if (!$this->Post->exists($id)) { throw new NotFoundException(__('Invalid post')); } if ($this->request->is(array('post', 'put'))) { if ($this->Post->save($this->request->data)) { $this->Session->setFlash(__('The post has been saved.')); return $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The post could not be saved. Please, try again.')); } } else { $options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id)); $this->request->data = $this->Post->find('first', $options); } } /** * delete method */ public function delete($id = null) { $this->Post->id = $id; if (!$this->Post->exists()) { throw new NotFoundException(__('Invalid post')); } $this->request->onlyAllow('post', 'delete'); if ($this->Post->delete()) { $this->Session->setFlash(__('The post has been deleted.')); } else { $this->Session->setFlash(__('The post could not be deleted. Please, try again.')); } return $this->redirect(array('action' => 'index')); }}
Our controller contains five methods, index, view, add, edit and delete. These are called actions, in CakePHP.
View:
Our view will contain four .ctp files, which will display our view files.
First create add.ctp inside app/View/Posts folder. This file contains the code for adding elements into our database.
<div class="posts form"> <?php echo $this->Form->create('Post'); ?> <fieldset> <legend><?php echo __('Add Post'); ?></legend> <?php echo $this->Form->input('title'); echo $this->Form->input('body'); echo $this->Form->input('funnypost'); echo $this->Form->input('seriouspost'); ?> </fieldset> <?php echo $this->Form->end(__('Submit')); ?> </div> <div class="actions"> <h3><?php echo __('Actions'); ?></h3> <ul> <li><?php echo $this->Html->link(__('List Posts'), array('action' => 'index')); ?></li> </ul> </div>
Now create edit.ctp inside the same folder. It is responsible for editing existing single post.
<div class="posts form"> <?php echo $this->Form->create('Post'); ?> <fieldset> <legend><?php echo __('Edit Post'); ?></legend> <?php echo $this->Form->input('id'); echo $this->Form->input('title'); echo $this->Form->input('body'); echo $this->Form->input('funnypost'); echo $this->Form->input('seriouspost'); ?> </fieldset> <?php echo $this->Form->end(__('Submit')); ?> </div> <div class="actions"> <h3><?php echo __('Actions'); ?></h3> <ul> <li><?php echo $this->Form->postLink(__('Delete'), array('action' => 'delete', $this->Form->value('Post.id')), null, __('Are you sure you want to delete # %s?', $this->Form->value('Post.id'))); ?></li> <li><?php echo $this->Html->link(__('List Posts'), array('action' => 'index')); ?></li> </ul> </div>
Now create index.ctp to the same location. This file is the landing view page for our application.
<div class="posts index"> <h2><?php echo __('Posts'); ?></h2> <table cellpadding="0" cellspacing="0"> <tr> <th><?php echo $this->Paginator->sort('id'); ?></th> <th><?php echo $this->Paginator->sort('title'); ?></th> <th><?php echo $this->Paginator->sort('body'); ?></th> <th><?php echo $this->Paginator->sort('funnypost'); ?></th> <th><?php echo $this->Paginator->sort('seriouspost'); ?></th> <th><?php echo $this->Paginator->sort('created'); ?></th> <th><?php echo $this->Paginator->sort('modified'); ?></th> <th class="actions"><?php echo __('Actions'); ?></th> </tr> <?php foreach ($posts as $post): ?> <tr> <td><?php echo h($post['Post']['id']); ?> </td> <td><?php echo h($post['Post']['title']); ?> </td> <td><?php echo h($post['Post']['body']); ?> </td> <td><?php echo h($post['Post']['funnypost']); ?> </td> <td><?php echo h($post['Post']['seriouspost']); ?> </td> <td><?php echo h($post['Post']['created']); ?> </td> <td><?php echo h($post['Post']['modified']); ?> </td> <td class="actions"> <?php echo $this->Html->link(__('View'), array('action' => 'view', $post['Post']['id'])); ?> <?php echo $this->Html->link(__('Edit'), array('action' => 'edit', $post['Post']['id'])); ?> <?php echo $this->Form->postLink(__('Delete'), array('action' => 'delete', $post['Post']['id']), null, __('Are you sure you want to delete # %s?', $post['Post']['id'])); ?> </td> </tr> <?php endforeach; ?> </table> <p> <?php echo $this->Paginator->counter(array( 'format' => __('Page {:page} of {:pages}, showing {:current} records out of {:count} total, starting on record {:start}, ending on {:end}') )); ?> </p> <div class="paging"> <?php echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled')); echo $this->Paginator->numbers(array('separator' => '')); echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled')); ?> </div> </div> <div class="actions"> <h3><?php echo __('Actions'); ?></h3> <ul> <li><?php echo $this->Html->link(__('New Post'), array('action' => 'add')); ?></li> </ul> </div>
Lastly create view.ctp in the same folder. View, is the single post detail page.
<div class="posts view"> <h2><?php echo __('Post'); ?></h2> <dl> <dt><?php echo __('Id'); ?></dt> <dd> <?php echo h($post['Post']['id']); ?> </dd> <dt><?php echo __('Title'); ?></dt> <dd> <?php echo h($post['Post']['title']); ?> </dd> <dt><?php echo __('Body'); ?></dt> <dd> <?php echo h($post['Post']['body']); ?> </dd> <dt><?php echo __('Funnypost'); ?></dt> <dd> <?php echo h($post['Post']['funnypost']); ?> </dd> <dt><?php echo __('Seriouspost'); ?></dt> <dd> <?php echo h($post['Post']['seriouspost']); ?> </dd> <dt><?php echo __('Created'); ?></dt> <dd> <?php echo h($post['Post']['created']); ?> </dd> <dt><?php echo __('Modified'); ?></dt> <dd> <?php echo h($post['Post']['modified']); ?> </dd> </dl> </div> <div class="actions"> <h3><?php echo __('Actions'); ?></h3> <ul> <li><?php echo $this->Html->link(__('Edit Post'), array('action' => 'edit', $post['Post']['id'])); ?> </li> <li><?php echo $this->Form->postLink(__('Delete Post'), array('action' => 'delete', $post['Post']['id']), null, __('Are you sure you want to delete # %s?', $post['Post']['id'])); ?> </li> <li><?php echo $this->Html->link(__('List Posts'), array('action' => 'index')); ?> </li> <li><?php echo $this->Html->link(__('New Post'), array('action' => 'add')); ?> </li> </ul> </div>
We are done now open your web browser and go to –
http://localhost/cakephp24/posts
Give some data as input and test, how it works.
Conclusion
Hope you have enjoyed the whole tutorial. If you want to taste the sweetness of CakePHP, stick with it. Then you will learn, what you can do and what you can not do with CakePHP.
Happy Coding… 🙂
CRUD with CakePHP
Hej, I’m from Bangladesh. Learning programming is one of the freaking decisions I have taken in my life. Because, it makes me and my life crazy. I have great weakness on open source technologies. Perhaps, that’s why I do not know any closed source language. I fall in love with programming, when I started my undergraduate in East West University. Till now, I can not live without it.
GoodGood
Hi admin how to use this programing in languages and how to creat database
bro it would have been better if you would have given explanation
bro it would have been better if you would have given explanation too
This are very helpful for me thanx……
This post are very helpful for me thanx sir
Error: Class ‘App’ not found
File /opt/lampp/htdocs/cakephp/src/Controller/PostsController.php
Line: 3
Sir it is showing me this error
url i used is: localhost/cakephp/posts
wew
thanks for sharing. very helpful
nice tutorial bro
i appreciate you to make this article for everyone
grow up in your life…
hello, i want to learn cakephp framework bengali language. how can i contact.