public function actions() { return array_merge(parent::actions(), ['index' => ['class' => 'yii\\rest\\IndexAction', 'modelClass' => $this->modelClass, 'checkAccess' => [$this, 'checkAccess'], 'prepareDataProvider' => function ($action) { $m = new FormulaSearch(); $params = \Yii::$app->getRequest()->getQueryParams(); $dataProvider = $m->search($params); return $dataProvider; }]]); }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = FormulaSearch::find()->andFilterWhere(['in', 'formula.type', ['constant', 'formula']]); $sort = new Sort(['attributes' => ['type', 'variable', 'title', 'expression', 'added_on']]); if (!empty($params['order'])) { $typeOrder = $params['order'][0] == '+' ? SORT_ASC : SORT_DESC; $sort->defaultOrder = array(substr($params['order'], 1, strlen($params['order'])) => $typeOrder); } $pages = new Pagination(); $perPage = isset($params['perPage']) ? $params['perPage'] : null; if (!empty($perPage)) { $pages->pageSize = $perPage; $pages->page = isset($params['page']) ? $params['page'] : null; if ($perPage == 'all') { $pages = false; } } $this->load(['FormulaSearch' => $params]); $query->andFilterWhere(['=', 'formula.type', $this->type]); $query->andFilterWhere(['=', 'formula.calculation_id', \Yii::$app->getRequest()->getQueryParam('calculation_id')]); $query->andFilterWhere(['like', 'formula.variable', $this->variable]); $query->andFilterWhere(['like', 'formula.title', $this->title]); $query->andFilterWhere(['like', 'formula.expression', $this->expression]); //$sql = $query->createCommand()->rawSql; //die($sql); $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => $sort, 'pagination' => $pages]); return $dataProvider; }