Yii:在网格视图中使用CActiveDataProvider进行过滤会产生错误

时间:2015-03-03 07:28:27

标签: php gridview yii

我正在尝试在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>"'
    ),



),));?>

1 个答案:

答案 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),你应该通过$modelfilter的CGridView,并将$model->search()传递给dataProvider of CGridView。然后,您可以在$model->search()方法内构建条件。我建议你在yii中生成一个示例CRUD并查看生成的代码。