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

ただし、このメソッドを使用して検索するときに、検索パラメーターがアドレスバーに表示されるのは好きではありませんgetpost代わりにメソッドを使用するように検索ウィジェットを変更しました。

$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'];

検索に関する補足事項として、POST の代わりに GET を使用することを常にお勧めします。私が使用する基本的なルールは、一部のデータを送信する必要があるときはいつでも POST にする必要があり、一部のデータをフェッチする必要があるときはいつでも GET にする必要があります..

更新:私が考えることができる主な理由は、検索にGETを使用することです

1) 検索では、ユーザーは前のフィルターに戻る機能を必要とします。これは、取得 URL パラメーターとして使用された場合、簡単です。

2) フィルター パラメーターが URL にある場合、特定のフィルターの後で結果を共有するのは非常に簡単です。友人といくつかの結果を共有したいと想像してください。(POST の場合) 段階的にフィルタリングするように彼に指示しますか?直接URLを与える(GET)

3) URL からパラメーターを変更するのは非常に簡単です。現在、2 ページ目にアクセスしていると想像してください。ただし、フィルターを表示している間、次の 5 ページへのリンクのみが表示されますが、15 ページ目の結果にジャンプしたいとします。

もっと多くの利点があるでしょう、私は現時点でこれらを考えることができます..

于 2013-02-12T03:43:10.057 に答える