2020-01-06 18:30:04 1351次浏览 1条回答 0 悬赏 30 金钱

今天突然发现,我后台用 Gii 生成的 crud,排序逻辑也不用我写的,sort 字段直接搞定。。。
那么问题来了,控制器是如何对传来的 sort 字段进行处理,然后输出排序好的 dataProvider 的?很尴尬,我找了半天没找到在哪,请各位大哥指点一下

补充于 2020-01-07 09:57

描述的不太清楚,再仔细说一下:通过gii/CRUD生成的products/controller/index方法:

    public function actionIndex()
    {
        $searchModel = new ProductSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

AR类ProductSearch也是通过gii/CRUD生成的:

class ProductSearch extends Product
{
    public function rules()
    {
        //  ...验证略
    }
    public function scenarios()
    {
        return Model::scenarios();
    }
    public function search($params)
    {
        $query = Product::find();
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        $this->load($params);
        if (!$this->validate()) {
            return $dataProvider;
        }
        //  $query->andFilterWhere([ ...
        ]);

        return $dataProvider;
    }
}

在生成的视图页面里点击可排序字段会传一个sort字段到products/index方法,对数据进行排序(url:http://localhost:63341/index.php/admin/shop/products?sort=heat),这个sort字段是如何被处理的呢?

最佳答案

  • 花椒 发布于 2020-01-08 11:31 举报

    ActiveDataProvider的功劳

    1 条回复
    回复于 2020-01-08 14:10 回复

    在实例化ActiveDataProvider的时候,并没有设定sort呀,dataProvider是在哪里接收到这个sort的呢?

    $dataProvider = new ActiveDataProvider([
                'query' => $query,
               //  这里设置'sort' => ...
            ]);
    
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
PenDon
主管

PenDon 长沙

注册时间:2019-08-21
最后登录:2021-11-19
在线时长:22小时42分
  • 粉丝0
  • 金钱540
  • 威望10
  • 积分860

热门问题