2015-03-03 95 views
2

我想在cGridview使用过滤器与cActiveDataProvider但它提供了以下异常的Yii:在网格视图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

我产生一个新的警予项目,并在我的数据库做了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的过滤器只接受模型的对象,但您将CActiveDataProvider的实例传递给它。假设$model是模型对象(例如,您的案例中的用户),您应该将$model传递给CGridView的filter,并将$model->search()传递给dataProvider of CGridView。然后,您可以在$model->search()方法中构建您的标准。我建议你在yii中生成一个示例CRUD并查看生成的代码。

+0

@ talhamalik22:你试过我的解决方案吗? – hamed 2015-03-03 15:58:39