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!!