我有一个简单的搜索
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',
));
但现在,当我点击搜索按钮时,页面只会刷新,而不是显示搜索结果,我想我在这里遗漏了一些东西……
发布于 2013-02-12 03:43:10
在控制器的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中,在某些filters..Imagine之后很容易分享结果你想和朋友分享一些结果,你会告诉他如何逐步过滤(在发布的情况下),还是给他一个直接的url(GET)
3)从url更改参数非常容易,想象一下你当前访问的是第2页,但在页面上显示过滤器时,只显示下5页的链接,但你想直接跳到第15页的结果。
还会有更多的好处,我现在就能想到这些。
https://stackoverflow.com/questions/14824963
复制相似问题