Yii CGridView不显示默认过滤器

时间:2016-07-07 10:26:31

标签: php yii cgridview

我正在尝试使用Yii呈现CGridView小部件,尽管表格正确,但它不包含过滤器输入。

视图中的我的窗口小部件代码如下:

<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'awesomeGrid',
'dataProvider'=>$model->search(),
'enableSorting'=>true,
'filter'=>$model,
'columns'=>array(
    /*array('name'=>'Check',
        'value'=>'CHtml::checkBox("name",true)',
        'type'=>'raw',
        'htmlOptions'=>array('width'=>5),
),*/
    array(
        'header'=>'Prueba_Columna',
        'name'=>'OBJECT_TYPE',
        'value'=>'$data->OBJECT_TYPE',
        'filter'=>$model->getFilter(),
        'type' => 'raw'),

)
));
?>

我的模特是:

public function search(){
    $criteria=new CDbCriteria;
   $criteria->select='OBJECT_TYPE';
   return new CActiveDataProvider($this,array(
            'criteria'=>$criteria,
       'pagination'=>array('pageSize'=>20)
    ));



}
public function getFilter(){
    $criteria=new CDbCriteria;
    $criteria->compare('OBJECT_TYPE',$this->OBJECT_TYPE,true);
   return new CActiveDataProvider($this,array(
            'criteria'=>$criteria,
    ));



}

我的控制员:

public function actionIndex()
{
    $appUsersModel    = new AppUsers(); //Instance the model object
    $objectsListModel = new ObjectsList('search');
    $objectsUserModel = new ObjectUser();

    $appsArray     = $this->getApps($appUsersModel);
    $projectsArray = $this->getProjects($objectsListModel);
    $usersArray    = array(array());
    $typesArray    = array(array());
    $objectsArray  = array(array());

    // renders the view file 'protected/views/security/index.php'
    // using the default layout 'protected/views/layouts/main.php'
    $this->render('index',
        array('appsArray' => $appsArray,
        'usersArray' => $usersArray,
        'projectsArray' => $projectsArray,
        'typesArray' => $typesArray,
        'objectsArray' => $objectsArray,
        'appUsersModel' => $appUsersModel,
        'objectsUserModel' => $objectsUserModel,
        'model'=>$objectsListModel,
        )
    );
}

当我访问firefox上的开发人员工具并检查HTML是否正确时,我会看到以下内容:

<div id="awesomeGrid" class="grid-view">
<div class="summary">Displaying 1-20 of 2432 results.</div>
<table class="items">
<thead>
<tr>
<th id="awesomeGrid_c0"><a class="sort-link" href="/apps/project_name/web/index.php/security/index?ObjectsList_sort=OBJECT_TYPE">Prueba_Columna</a></th></tr>
    <tr class="filters">
    <td></td></tr>
    </thead>
    <tbody>
    <tr class="odd">
    <td>VIEW</td></tr>
    <tr class="even">
    <td>VIEW</td></tr>
    </table>
    </div>

正如您所看到的那样,<tr class="filters"><td></td></tr>标记有var previousValue = 0 @IBAction func onStepperValueChangedAction(sender: UIStepper) { if sender.value > previousValue { increaseValue() } else { decreaseValue() } previousValue = sender.value } 标记,但不存在要过滤的输入标记。然后我认为小部件是属性配置的,但也许有一些错误导致输入没有显示。

任何人都可以帮助我吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

过滤器应为array。你检查过getFilter()的输出了吗?它似乎没有返回array。这就是为什么你没有得到过滤器的原因。尝试查看function

的输出

答案 1 :(得分:0)

最后我得到了一个解决方案,因为我告诉你我正在使用Yii,但是我没有使用Gii生成模型,因此规则功能是空的。

我在该函数上定义了一个返回数组,使该字段能够被搜索。

代码是:

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(

                // The following rule is used by search().
                // Please remove those attributes that should not be searched.
                array('OBJECT_TYPE', 'safe', 'on'=>'search'),
        );

    }

感谢所有人的回复。