0

我有一个简单的搜索

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

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

4

1 回答 1

3

在控制器的 actionAdmin 函数中,将 $_GET 替换为 $_POST ...

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

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

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

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

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

1) 在搜索中,用户需要返回到前一个过滤器的功能,如果用作获取 url 参数,则很简单。

2)如果过滤器参数在url中,在某些过滤器之后非常容易分享结果..想象你想与朋友分享一些结果,你会给他一步一步过滤的说明(如果是POST),或者给出一个直接的 url(GET)

3) 从 url 更改参数非常容易,假设当前您正在访问第 2 页,但在显示过滤器的页面上仅显示指向下 5 页的链接,但您想直接跳转到第 15 页结果..

还有很多优点,我现在能想到的就这些了。。

于 2013-02-12T03:43:10.057 回答