【问题标题】:Yii: Filter with CActiveDataProvider in grid view gives errorYii:在网格视图中使用 CActiveDataProvider 进行过滤会出错
【发布时间】:2015-03-03 07:28:26
【问题描述】:

我正在尝试通过 cActiveDataProvider 在 cGridview 中使用过滤器,但它给出了以下异常

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>"'
    ),



),));?>

【问题讨论】:

    标签: php gridview yii


    【解决方案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 的过滤器只接受模型的对象,但您将 CActiveDataProvider 的实例传递给它。假设$model 是模型对象(例如,您的情况下的用户),您应该传递@987654328 @ 到 CGridView 的 filter 并将 $model-&gt;search() 传递给 dataProvider of CGridView。然后您可以在 $model-&gt;search() 方法中构建您的标准。我建议你在 yii 中生成一个示例 CRUD 并查看生成的代码。

    【讨论】:

    • @talhamalik22:你试过我的解决方案了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多