Reputation: 1559
I am trying to use filters in cGridview with cActiveDataProvider but it gives following exception
CActiveDataProvider and its behaviors do not have a method or closure named "getValidators"
Please check following code
Controller
public function actionAdmin()
{
$admin_type=Yii::app()->user->isAdmin;
if($admin_type==1)
{
$admin_batches=WebHelper::getAllAdminBatchesInArray(Yii::app()->user->getId());
if(!empty($admin_batches))
{
$batch_list=implode(",",$admin_batches);
}
$batch_criteria="group_id IN ( ".$batch_list." ) and status!=-1";
}
else
$batch_criteria="1 and status!=-1";
$model=new CActiveDataProvider('Users',array('criteria'=>array(
'condition'=>$batch_criteria,
)));
// print_r($model);die;
//$model->unsetAttributes(); // clear any default values
if(isset($_GET['Users']))
$model->attributes=$_GET['Users'];
$this->render('admin',array(
'model'=>$model,
));
}
View
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'users-grid',
'dataProvider'=>$model,
'filter'=>$model,
'columns'=>array(
array(
'class'=>'CButtonColumn',
'htmlOptions'=>array('width'=>'70px'),
'buttons' => array(
'view' => array(
'imageUrl' => Yii::app()->baseUrl . '/themes/gamify/images/view-image.png'
),
'update' => array(
'imageUrl' => Yii::app()->baseUrl . '/themes/gamify/images/Edit-icon.png'
),
'delete' => array(
'imageUrl' => Yii::app()->baseUrl . '/themes/gamify/images/Delete-icon.png'
)
)
),
first_name',
'last_name',
'user_name',
'group.group_title',
//'password',
'email_id',
array(
'type'=>'raw',
'name'=>'Status',
'value'=>'($data->status==0)?"<a href=\'\' id=\'$data->user_id\' class=\'user_status Active\'>Active</a>":"<a href=\'\' id=\'$data->user_id\' class=\'user_status Inactive\'>Inactive</a>"'
),
),));?>
Upvotes: 2
Views: 1119
Reputation: 8043
I generated a new yii project and made a company
table in my db, Then I generated a CRUD in gii for testing. This is the default structure for actionAdmin
in every generated yii controller:
public function actionAdmin() {
$model = new Company('search');
$model->unsetAttributes(); // clear any default values
if (isset($_POST['Company']))
$model->attributes = $_POST['Company'];
$this->render('admin', array(
'model' => $model,
));
}
And in the default admin
view for every generated CRUD, yii passes $model
to the CGridView filter
attribute. This means that, CGridView's filter accepts only Model's Object, but you pass instance of CActiveDataProvider to it. Suppose $model
is a model object(For example, Users in your case), You should pass $model
to filter
of CGridView and pass $model->search()
to dataProvider of CGridView
. Then you can build your Criteria inside of $model->search()
method. I recommend you to generate a sample CRUD in yii and see generated code.
Upvotes: 1