PDA

View Full Version : CRUD problem using extjs and Yii framework



ericw
28 Jun 2010, 3:52 PM
Hi.. I'm trying to work on how to use extjs and Yii framework together to perfrom CRUD, but I am not sure how to do that. I believe proxy should be used to accomplish the process... but I am not sure how to call Yii methods in javascript..

Could you help me with this? i have pasted some of the codes here..


thanks!!

here is the javascript for grid


var jsonstore=new Ext.data.JsonStore({
//root: 'results',
//totalProperty: 'total',
//id:table,
//reader: new Ext.data.JsonReader(),
proxy: new Ext.data.HttpProxy({
api: {
read: '../source/web/index.php/table/display',
create: '../source/web/index.php/table/create',
update: '../source/web/index.php/table/update',
destroy: '../source/web/index.php/table/delete'
}
}),
method:'POST',
autoLoad: true,
//reader: new Ext.data.JsonReader(),
//writer:writer,




fields: [
{name: 'id',type: 'string'},
{name: 'first_name',type: 'string'},
{name: 'last_name',type: 'string'},
{name: 'phone',type: 'string'},
{name: 'address',type: 'string'},
]




});
var colM=new Ext.grid.ColumnModel([
{header: "id",dataIndex: 'id',width: 50,sortable:true},
{header: "First Name",dataIndex: 'first_name',width: 50,sortable:true},
{header: "Last Name",dataIndex: 'last_name',width: 50,sortable:true},
{header: "phone",dataIndex: 'phone',width: 50,sortable:true},
{header: "address",dataIndex: 'address',width: 70,sortable:true}
]);


var tablegrid = new Ext.grid.GridPanel({
//title:"table",
height:500,
width:600,


cm:colM,
store:jsonstore,
autoExpandColumn:1
});


tablegrid.load();







here is the code for layout code..


/****************
* table Fit layout
*
****************/




var tablelayout = new Ext.Panel({
title: 'tablelayout',
layout:'fit',
autoHeight:true,


tbar: [
{
xtype: 'tbbutton',
text: 'Delete',
handler: function doDel(){
Ext.Msg.alert('Boo', 'delete?')}


},
{
xtype: 'tbbutton',
text: 'update',
handler: function(){
Ext.Msg.alert('Boo', 'update?');
}
//handeler:addh
},
/*
{
text: 'Save Changes',
iconCls: 'btn-save',
handler: function(){
jsonstore.save();
jsonstore.load();
tablegrid.getView().refresh();
}
}
*/
],
items:tablegrid //table.js
//items:rowgrid
})




i am not sure how to write the CRUD code in the handler to perform those actions...



here is the Yii controller code..


<?php


class tableController extends Controller
{
/**
* @var string the default layout for the views. Defaults to 'column2', meaning
* using two-column layout. See 'protected/views/layouts/column2.php'.
*/
public $layout='column2';


/**
* @var CActiveRecord the currently loaded data model instance.
*/
private $_model;


/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
);
}


/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view','display'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}


/**
* Displays a particular model.
*/
public function actionView()
{
$this->render('view',array(
'model'=>$this->loadModel(),
));
}


/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'view' page.
*/
public function actionCreate()
{
$model=new table;


// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);


if(isset($_POST['table']))
{
$model->attributes=$_POST['table'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}


$this->render('create',array(
'model'=>$model,
));
}


/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
*/
public function actionUpdate()
{
$model=$this->loadModel();


// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);


if(isset($_POST['table']))
{
$model->attributes=$_POST['table'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}


$this->render('update',array(
'model'=>$model,
));
}


/**
* Deletes a particular model.
* If deletion is successful, the browser will be redirected to the 'index' page.
*/
public function actionDelete()
{
if(Yii::app()->request->isPostRequest)
{
// we only allow deletion via POST request
$this->loadModel()->delete();


// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(array('index'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}


/**
* Lists all models.
*/
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('table');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}


/**
* Manages all models.
*/
public function actionAdmin()
{
$model=new table('search');
if(isset($_GET['table']))
$model->attributes=$_GET['table'];


$this->render('admin',array(
'model'=>$model,
));
}


/**
* Returns the data model based on the primary key given in the GET variable.
* If the data model is not found, an HTTP exception will be raised.
*/
public function loadModel()
{
if($this->_model===null)
{
if(isset($_GET['id']))
$this->_model=table::model()->findbyPk($_GET['id']);
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}




/**
* Performs the AJAX validation.
* @param CModel the model to be validated
*/
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='table-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}


public function actionDisplay()
{
$tableModel = new table();
if(isset($_GET['table'])){


$model->attributes=$_GET['table'];
}
//Echo CJSON::encode($userModel->findAll());
$table = table::model()->findall();
Echo CJSON::encode($table);
}


}




I think what i need to do is to link the controller with the layout code...
but i just don't know how...


thanks in advance for your help!!

bluejedi
17 Nov 2011, 7:40 PM
please try this http://www.yiiframework.com/extension/e-xgen/ it creates crud based on table and relation