CGridView 中的过滤器不过滤

Filters in CGridView not filtering

您能检查一下为什么过滤在 CGridView 中不起作用吗?当我在过滤器字段中输入例如 'Adam' 时,没有任何反应。我找不到我的错误,一切看起来都不错,但没有用。我帮助了那篇文章:Yii: CGridView Filter examples

控制器

 <?php
    class UzytkownikController extends CController
    {
        public function actionIndex()
        {
            $Dane = new Uzytkownik('search');
            $Dane -> unsetAttributes();  // clear any default values
            if(isset($_GET['Uzytkownik']))
            {
                $Dane->attributes=$_GET['Uzytkownik'];
            }
            $this -> render ('index', array(
                'Dane' => $Dane,
            ));
        }
    }
    ?>

型号

<?php
class Uzytkownik extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function search()
    {
        $criteria = new CDbCriteria;
        $criteria -> compare('imie', $this -> imie, true);

        return new CActiveDataProvider($this, array(
                'criteria' => $criteria,
                )
        );
    }
}

?>

WIEV

<?php 
    $this -> widget('zii.widgets.grid.CGridView', array(
        'dataProvider' => $Dane -> search(),
        'filter' => $Dane,
        'columns' => array(
                array(
                    'name' => 'imie',
                    'type'=>'raw',
                ),
                array(
                    'name' => 'nazwisko',
                    'type'=>'raw',
                    'filter' => false,
                ),
                array(
                    'name' => 'data',
                    'filter' => false,
                ),
            ), 
        )
    );
?>

供日后参考:

为了确保 $model->attributes "saves" 属性 model 需要添加以下内容:

public function rules() {
    return array(
      array('imie', 'safe', 'on'=>'search')
    );
}

并且应该使用 $_GET 而不是 $_POST 因为 CGridView 小部件在发布到服务器时使用 GET:

class UzytkownikController extends CController
{
    public function actionIndex()
    {
        $Dane = new Uzytkownik('search');
        $Dane -> unsetAttributes();  // clear any default values
        if(isset($_GET['Uzytkownik']))
        {
            $Dane->attributes=$_GET['Uzytkownik'];
        }
        $this -> render ('index', array(
            'Dane' => $Dane,
        ));
    }
}