machyang 2015-12-03 21:55:35 5718次浏览 2条回复 1 0 0

如题,使用ActiveDataProvider分页,使用Linker分页。 前端form开始默认使用POST方式,查询显示一切正常

当前端条件查询时,开始显示正常,但是只要一翻页,立马就是默认查询所有(输入条件在点击页面就没有被获取)

查看源代码发现Pagnition和Linker是使用GET方法获取数据,如下: $params = $request instanceof Request ? $request->getQueryParams() : []; 因此,我通过把form的method改成GET方式,是可以解决我的问题的。(gii生成的CURD也是GET方式获取前端数据)

问题: 1.form默认是POST方式,为什么这里POST不能很好的支持呢? 2.使用GET方法可以解决上面的问题,但有一个新的问题,就是在当前页不停的点击比如 【查询】【刷新】按钮,请求串的参数一直在累积(form有几个输入,每次点击,就增加一个完整的输入串),怎么解决呢? 2.我通过继承方式重写了一个Pagniation extends yii\data\Pagniation,希望能支持GET和POST方法,但是没有解决下面问题。 在yii\data\BaseActiveDataProvider中的方法:

public function setPagination($value)
{
    if (is_array($value)) {
        $config = ['class' => Pagination::className()];//这个Pagination默认是yii\data\Pagniation
    }
 }

我怎么才能让这个Pagination是使用我自己写的Pagination呢?

  • 回复于 2017-03-07 12:00 举报

    遇到相同问题, 找到解决方法如下:

    original article link

    不管怎样,你需要一种能持久化数据的方式。你可以有以下几种选择:

    1. GET参数
    2. SESSION
    3. COOKIE
    4. hidden field

    我的建议是尽量用GET参数,尤其是这种搜索查询页面。

    在action中得到post数据后写入$_GET就行了
    像这样

    $form=new SearchForm;
    if(isset($_POST['SearchForm']))
    {
        $form->attributes=$_POST['SearchForm'];
        $_GET['keyword'] = $form->keyword;
        $_GET['cat_id'] = $form->cat_id;
    } elseif(isset($_GET['keyword'])) {
        if(isset($_GET['keyword'])) $form->keyword=$_GET['keyword'];
        if(isset($_GET['cat_id'])) $form->cat_id=$_GET['cat_id'];
    } else {
    既没post也没get数据的话,设定默认查询条件
    }
    if($form->validate())
    {
    ....处理查询
    }
    
    

    我自己的代码, 范围搜索

    if (!empty(Yii::$app->request->post())){
    $result_from = Yii::$app->request->post('DemoCollectionSearch')['result_from'];
    $result_to = Yii::$app->request->post('DemoCollectionSearch')['result_to'];
    }else{
    $result_from = Yii::$app->request->get('result_from');
    $result_to = Yii::$app->request->get('result_to');
    }
    
    $searchModel = new DemoCollectionSearch();
    
    $searchModel->result_from = $result_from;
    $searchModel->result_to = $result_to;
    
    
    
    
    $_GET += array(
    'result_from' => $dresult_from,
    'result_to' => $result_to,
    ); // define
    
    
    
    
    1 条回复
    回复于 2017-07-26 12:54 回复

    你好!为什么我在action中把post过来的参数,写进get里,翻页 后get还是空的呢?

  • 回复于 2017-01-04 13:49 举报

    您好 楼主解决了吗

您需要登录后才可以回复。登录 | 立即注册