yii搜索表单通过post而不是get

时间:2013-02-12 03:35:08

标签: yii

我有一个简单的搜索

public function search() {
    $criteria=new CDbCriteria;
    $criteria->with = array('agent');

    $criteria->compare('full_name',$this->full_name,true);

    if ($this->gender_id != "") {
        $criteria->compare('gender_id',$this->gender_id);
    }

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

但是,当您使用get方法进行搜索时,我不希望搜索参数显示在地址栏中。我已将搜索小部件更改为使用post方法:

$form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl($this->route),
    'method'=>'post',
));

但是现在当我点击搜索按钮时页面只是刷新而不是显示搜索结果,我想我在这里遗漏了一些东西......

1 个答案:

答案 0 :(得分:3)

在你的actionAdmin函数中,控制器用$ _POST ...

替换$ _GET
if(isset($_GET['Model']))
    $model->attributes=$_GET['Model'];

将上述行中的$ _GET替换为$ _POST,如:

if(isset($_POST['LoginLog']))
    $model->attributes=$_POST['LoginLog'];

在关于搜索的旁注中,总是建议使用GET而不是POST,我使用的基本规则是每当需要提交一些数据时它应该是POST,每当需要获取某些数据时它应该是GET。

更新: 我能想到的主要原因是我会使用GET进行搜索

1)在搜索中,用户需要返回上一个过滤器的功能,如果用作get url params,则是直接过滤。

2)如果过滤器参数在url中,在某些过滤器之后非常容易分享结果。想象一下你想和朋友分享一些结果,你会给他指示一步一步过滤(如果是POST的话) ),或提供直接网址(GET)

3)它很容易从url更改params,想象当前你正在访问第2页,但是在显示过滤器的页面上只显示了接下来5页的链接,但你想直接跳到第15页结果.. < / p>

还有更多的优点,我现在可以想到这些......