CRUD in CakePHP Part : 2


In previous post we learnt about view and listing of the Users.In this post we'll learn about add,edit and delete operations.

Adding Users

To add a user record put the below function in our UsersController.php

public function add() {

        if ($this->request->is('post')) {

            $this->User->create();

            if ($this->User->save($this->request->data)) {

                $this->Session->setFlash(__('User has been saved.'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('Unable to add User.'));
            }
        }
    }

Here we have to include the SessionComponent  and SessionHelper  in our controller. 

    public $helpers = array('Html', 'Form', 'Session');

    public $components = array('Session');


Now its time to create view file for the add.So create a file add.ctp in /app/View/Users/
Our add view looks like.

<!-- File: /app/View/Users/add.ctp -->

<h1>Add User</h1>
<?php
echo $this->Form->create('User');
echo $this->Form->input('firstname');
echo $this->Form->input('lastname');
echo $this->Form->input('email');
echo $this->Form->input('message', array('rows' => '3'));
echo $this->Form->end('Save User');
?>

We used the FormHelper to generate the opening tag for an HTML form. $this->Form->create() will generates:

<form id="UserAddForm" method="post" action="/users/add">

The $this->Form->end()  generates a submit button.

Go back to update our /app/View/Users/index.ctp view file  for adding “Add User” link. Before the <table>, simply add the following line:

<?php echo $this->Html->link(

    'Add User',

    array('controller' => 'users', 'action' => 'add')

); ?>

Editing Users

Create a new edit() method in UsersController.php

public function edit($id = null) {

    if (!$id) {

        throw new NotFoundException(__('Invalid user'));

    }

    $user = $this->User->findById($id);
    if (!$user) {
        throw new NotFoundException(__('Invalid user'));
    }
    if ($this->request->is('post') || $this->request->is('put')) {
        $this->User->id = $id;
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('User has been updated.'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('Unable to update User.'));
        }
    }
    if (!$this->request->data) {
        $this->request->data = $user;
    }
}


Create a view file for the edit method.

<!-- File: /app/View/Users/edit.ctp -->

<h1>Edit User</h1>

<?php

    echo $this->Form->create('User');

    echo $this->Form->input('firstname');
    echo $this->Form->input('lastname');
    echo $this->Form->input('email');
    echo $this->Form->input('message', array('rows' => '3'));
    echo $this->Form->input('id', array('type' => 'hidden'));
    echo $this->Form->end('Update User');
?>

One thing to note here: CakePHP will assume that you are trying to edit a model if the ‘id’ field is present in the data array. If no ‘id’ is present, Cake will assume that you are trying to insert a new model when save() is called.

To edit specific users, update your index view.

<?php echo $this->Html->link(

    'Add User',

    array('controller' => 'users', 'action' => 'add')

); ?>


<h1>Blog Users</h1>
<table>
    <tr>
        <th>Id</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
        <th>Message</th>
<th>Action</th>
    </tr>
    <!-- Here is where we loop through our $users array, printing out user info -->

    <?php foreach ($users as $user): ?>
    <tr>
        <td><?php echo $user['User']['id']; ?></td>
        <td><?php echo $this->Html->link($user['User']['firstname'],
array('controller' => 'users', 'action' => 'view', $user['User']['id'])); ?></td>
        <td><?php echo $user['User']['lastname']; ?></td>
        <td><?php echo $user['User']['email']; ?></td>
        <td><?php echo $user['User']['message']; ?></td>
<td><?php echo $this->Html->link('View', array('action' => 'view', $user['User']['id'])); ?>
<?php echo $this->Html->link('Edit', array('action' => 'edit', $user['User']['id'])); ?>
       </td>
    </tr>
    <?php endforeach; ?>
    <?php unset($user); ?>
</table>

Deleting Users

Now create new function delete() in the UsersController:

public function delete($id) {

    if ($this->request->is('get')) {

        throw new MethodNotAllowedException();

    }

  if ($this->User->delete($id)) {
        $this->Session->setFlash(__('The user having id: %s has been deleted.', $id));
        $this->redirect(array('action' => 'index'));
    }
}


Add delete link in index.ctp file

        <td>

            <?php echo $this->Form->postLink(

                'Delete',array('action' => 'delete', $user['User']['id']),array('confirm' => 'Are you sure to delete?'));

            ?>

       </td>

That's it..!! Your CRUD Application is Ready.Download Demo.



Download Demo

Comments

Popular posts from this blog

How to show only month and year fields in android Date-picker?

How to construct a B+ tree with example

Conflict Serializability in database