-
27 Jun 2010 1:25 AM #1
how to perform CRUD using Yii framework
how to perform CRUD using Yii framework
Hi..I am trying to use extjs and Yii framework to perform database control.. but I am not sure how to do that.. Could anyone give me some instructions about it?
I now could only view grid using extjs from database..
Thanks very much!
-
27 Jun 2010 2:03 AM #2
-
27 Jun 2010 3:33 AM #3
Hi mankz.. Thanks for the quick reply!!
I have check the website.. but I still don't know how to do it...
here is the code to generate a grid..
here is the layout of above gridCode:var jsonstore=new Ext.data.JsonStore({ //reader: new Ext.data.JsonReader(), proxy: new Ext.data.HttpProxy({ api: { read: '../index.php/table/display', create: '../index.php/table/create', update: '../index.php/table/update', destroy: '../index.php/table/delete' } }), method:'POST', autoLoad: true, 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({ height:500, width:600, cm:colM, store:jsonstore, autoExpandColumn:1 }); table.load();
as you can see that i didn't write any of the handler function .. cause I don't know how to do it...Code:var tablelayout = new Ext.Panel({ 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?'); } }, { text: 'Save Changes', iconCls: 'btn-save', handler: function(){ Ext.Msg.alert('QQ', 'save?'); } } } ], items:tablegrid });
and here is the Yii controller
The controller is generated by yiic and it works fine under php, but i am not sure how to link extjs with it....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); } }
could you help me with that?
Thanks!!!
-
27 Jun 2010 3:53 PM #4
Hi mankz..
thanks for your quick reply..
i am new to programming. I have viewed the website, but still couldn't solve the problem..
Could you help me with it? thanks!
here is the javascript for grid
Code: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..
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..
I think what i need to do is to link the controller with the layout code... right?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); } }
but I am just don't know how...
thanks in advance for your help!!
-
27 Jun 2010 4:00 PM #5
Hi mankz..
thanks for your quick reply..
i am new to programming. I have viewed the website, but still couldn't solve the problem..
Could you help me with it? thanks!
here is the javascript for grid
HTML Code: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..
HTML 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..
I think what i need to do is to link the controller with the layout code... right?HTML 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); } }
but i just don't know how...
thanks in advance for your help!!
-
28 Jun 2010 3:29 AM #6
Hi mankz..
thanks for your quick reply..
i am new to programming. I have viewed the website, but still couldn't solve the problem..
Could you help me with it? 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... right?
but i just don't know how...
thanks in advance for your help!!
-
17 Nov 2011 7:42 PM #7
try this
Similar Threads
-
ExtJS extension for PHP Yii Framework (UPDATE)
By gevik in forum Community DiscussionReplies: 13Last Post: 21 Jan 2010, 11:41 AM -
Use of Remote Combobox with CRUD Framework
By keithcortis in forum Ext 3.x: Help & DiscussionReplies: 44Last Post: 30 Sep 2009, 3:01 AM -
How to integrate remote combobox with CRUD framework
By jdaum in forum Ext 2.x: Help & DiscussionReplies: 12Last Post: 27 Aug 2008, 2:42 PM -
integration with data dictionary/ crud framework
By jdaum in forum Ext 1.x: Help & DiscussionReplies: 1Last Post: 2 Jun 2007, 10:01 AM


Reply With Quote