我有一个简单的搜索
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',
));
但是现在当我点击搜索按钮时页面只是刷新而不是显示搜索结果,我想我在这里遗漏了一些东西......
答案 0 :(得分:3)
在你的actionAdmin函数中,控制器用$ _POST ...
替换$ _GETif(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>
还有更多的优点,我现在可以想到这些......