,

Understanding Yii CFORM

Yii Framework
Yii Framework

In this tutorial we discuss about the basic principal of MVC using Yii Framework. How to create Model extends from CFormModel which we collect data from it, to create related Controller and finishing at View.

1. Generate webapp from Command Prompt

yiic webapp myapps

2. Uncomment gii on myapps/protected/config/main.php. Set your prefered password. This allow us to use scaffolding modules provided by Yii Framework. Please remove this when you ready to deploy your application for security reason.

3. Access your gii module at your browser

http://localhost/myapps/index.php?r=gii.

4. Using gii module online forms, create a Controller, name it MyData, it should generate MyDataController.php. You can access it at root/myapps/controllers/MyDataController.php

5. Duplicate myapps/models/ContactForm.php, rename it as MyDataForm.php. This will act as your model. This model extends CFormModel class as we dont use Active Records.

6. Clean up MyDataForm.php like this

[php]
/**
* ContactForm class.
* ContactForm is the data structure for keeping
* contact form data. It is used by the ‘contact’ action of ‘SiteController’.
*/
class MyDataForm extends CFormModel
{
public $name;
public $email;
public $subject;

/**
* Declares the validation rules.
*/
public function rules()
{
return array(
// name, email, subject and body are required
array(‘name, email, subject’,’required’),
);
}

}[/php]

7. Open MyDataController.php, we will add two important action, actionShow() and actionEdit() method. The show method is to send data to View while edit method is to receive, validate, process and send to show method.

[php] class MyDataController extends Controller { public function actionIndex() { $this->render(‘index’);
}

public function actionEdit()
{
//create $data instance from MyDataForm class
$data = new MyDataForm;

//check if $_POST[‘MyDataForm’] carry data
if(isset($_POST[‘MyDataForm’])){

//assign $_POST[‘MyDataForm’] value to $data object
$data->attributes=$_POST[‘MyDataForm’];

//check if $data is valid or not empty
if($data->validate())

//if data is valid, send data to actionShow to view
$this->render(‘show’,array(‘data’=>$data));

//else if false, render edit page again
else
$this->render(‘edit’,array(‘data’=>$data));
}else
$this->render(‘edit’,array(‘data’=>$data));
}

public function actionShow()
{
//create $data instance from MyDataForm class
$data = new MyDataForm;

//check is attribute is set
if(isset($data->name))

//render view show
$this->render(‘show’,array(‘data’=>data));
else
//else if data not set, assign default value
$data->name="Nama";
$data->email="Email";
$data->subject="Subjek";

//render view show
$this->render(‘show’,array(‘data’=>$data));

}

}
[/php]

8. Duplicate root/myapps/protected/views/mydata/index.php. Rename it as show.php.

[php]

<?php
$this->breadcrumbs=array(
‘Data’=>array(‘/mydata’),
‘Show’,
);?>
<h1><?php echo $this->id . ‘/’ . $this->action->id; ?></h1>

<p>

<?php
echo $data->name;
echo $data->subject;
echo $data->email;
?>
</p>

[/php]

9. Duplicate again root/myapps/protected/views/mydata/index.php. Rename it as edit.php.

[php]

<?php
$this->breadcrumbs=array(
‘Data’=>array(‘/data’),
‘Show’,
);?>
<h1><?php echo $this->id . ‘/’ . $this->action->id; ?></h1>

<p>

<?php $this->pageTitle=Yii::app()->name . ‘ – Edit Message’; ?>
<p><?php echo CHtml::link(‘Back’, ‘/mydata/index’)?> </p>

<h1>Edit Our Message</h1>

<p>
<div class="yiiForm">
<?php echo CHtml::beginForm(); ?>
<?php echo CHtml::errorSummary($data); ?>
<div class="simple">
<?php echo CHtml::activeLabel($data,’name’); ?>
<?php echo CHtml::activeTextField($data,’name’); ?>
</div>

<div class="simple">
<?php echo CHtml::activeLabel($data,’email’); ?>
<?php echo CHtml::activeTextField($data,’email’); ?>
</div>

<div class="simple">
<?php echo CHtml::activeLabel($data,’subject’); ?>
<?php echo CHtml::activeTextField($data,’subject’); ?>
</div>

<div class="action">
<?php echo CHtml::submitButton(‘Submit’); ?>
</div>
<?php echo CHtml::endForm(); ?>
</div><!– yiiForm –>
</p>
</p>

[/php]

10. Lastly we customize the mainpage view for MyData which connect both edit view and show view. Open up  root/myapps/protected/views/mydata/index.php and customize like below

[php]

<?php
$this->breadcrumbs=array(
‘Data’,
);?>
<h1><?php echo $this->id . ‘/’ . $this->action->id; ?></h1>

<p>
Click here to view data <?php echo CHtml::link(‘here’,array(‘/Data/show’))?>
Click here to view data <?php echo CHtml::link(‘here’,array(‘/Data/edit’))?>
<p>

[/php]