|
22 | 22 | */ |
23 | 23 | class DataTableAction extends Action |
24 | 24 | { |
| 25 | + /** |
| 26 | + * GET or POST |
| 27 | + * |
| 28 | + * @var string |
| 29 | + */ |
| 30 | + public $requestMethod = "GET"; |
| 31 | + |
25 | 32 | /** |
26 | 33 | * @var ActiveQuery |
27 | 34 | */ |
@@ -50,24 +57,31 @@ public function init() |
50 | 57 | } |
51 | 58 | } |
52 | 59 |
|
| 60 | + protected function getParam($name, $defaultValue = null) |
| 61 | + { |
| 62 | + return $this->requestMethod == 'GET' ? |
| 63 | + Yii::$app->request->getQueryParam($name, $defaultValue) : |
| 64 | + Yii::$app->request->getBodyParam($name, $defaultValue); |
| 65 | + } |
| 66 | + |
53 | 67 | public function run() |
54 | 68 | { |
55 | 69 | /** @var ActiveQuery $originalQuery */ |
56 | 70 | $originalQuery = $this->query; |
57 | 71 | $filterQuery = clone $originalQuery; |
58 | | - $draw = Yii::$app->request->getQueryParam('draw'); |
| 72 | + $draw = $this->getParam('draw'); |
59 | 73 | $filterQuery->where = null; |
60 | | - $search = Yii::$app->request->getQueryParam('search', ['value' => null, 'regex' => false]); |
61 | | - $columns = Yii::$app->request->getQueryParam('columns', []); |
62 | | - $order = Yii::$app->request->getQueryParam('order', []); |
| 74 | + $search = $this->getParam('search', ['value' => null, 'regex' => false]); |
| 75 | + $columns = $this->getParam('columns', []); |
| 76 | + $order = $this->getParam('order', []); |
63 | 77 | $filterQuery = $this->applyFilter($filterQuery, $columns, $search); |
64 | 78 | $filterQuery = $this->applyOrder($filterQuery, $columns, $order); |
65 | 79 | if (!empty($originalQuery->where)) { |
66 | 80 | $filterQuery->andWhere($originalQuery->where); |
67 | 81 | } |
68 | 82 | $filterQuery |
69 | | - ->offset(Yii::$app->request->getQueryParam('start', 0)) |
70 | | - ->limit(Yii::$app->request->getQueryParam('length', -1)); |
| 83 | + ->offset($this->getParam('start', 0)) |
| 84 | + ->limit($this->getParam('length', -1)); |
71 | 85 | $dataProvider = new ActiveDataProvider(['query' => $filterQuery, 'pagination' => ['pageSize' => Yii::$app->request->getQueryParam('length', 10)]]); |
72 | 86 | Yii::$app->response->format = Response::FORMAT_JSON; |
73 | 87 | try { |
|
0 commit comments