|
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