我正在尝试在cGridview中使用带有cActiveDataProvider的过滤器,但它会出现以下异常
CActiveDataProvider及其行为没有名为" getValidators"
的方法或闭包
请检查以下代码
控制器
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,
));
}
查看
<?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>"'
),
),));?>
答案 0 :(得分:1)
我生成了一个新的yii项目并在我的数据库中创建了一个company
表,然后我在gii中生成了一个用于测试的CRUD。这是每个生成的yii控制器中actionAdmin
的默认结构:
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,
));
}
在每个生成的CRUD的默认admin
视图中,yii将$model
传递给CGridView filter
属性。 这意味着,CGridView的过滤器只接受Model的Object,但是你将CActiveDataProvider的实例传递给它。假设$model
是一个模型对象(例如,在你的情况下是Users),你应该通过$model
到filter
的CGridView,并将$model->search()
传递给dataProvider of CGridView
。然后,您可以在$model->search()
方法内构建条件。我建议你在yii中生成一个示例CRUD并查看生成的代码。