Yii2: Как изменить Pagination-Per-Page в API RESTful Web Service?

Я разрабатываю приложение, использующее AngularJS для интерфейса и Yii2 для бэкэнд.

Интерфейс требует полного набора всех пользователей.

В документации Yii2, http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html, я могу прочитать результат, разделенный на X-Pagination-Per-Page: 20

Как установить X-Pagination-Per-Page: ALL??

Ответ 1

Если вы используете yii\rest\ActiveController качестве родителя с вашего контроллера, вам необходимо переопределить индекс действия в вашем контроллере.

Это мой код

class StnkController extends ActiveController{
    public $modelClass = "common\models\Stnk";

    public function actions(){
        $actions = parent::actions();
        unset($actions['index']);
        return $actions;
    }

    public function actionIndex(){
        $activeData = new ActiveDataProvider([
            'query' => Stnk::find(),
            'pagination' => [
                'defaultPageSize' => 2,
            ],
        ]);
        return $activeData;
    }
}

Ответ 2

См. Этот пример из официальной документации.

Вы можете установить любое необходимое число, изменив параметр pageSize для pagination на pagination:

return new ActiveDataProvider([
    'pagination' => [
        'pageSize' => 10,
    ],
]);

Или вы можете полностью отключить pagination и показать все доступные данные следующим образом:

return new ActiveDataProvider([
    'pagination' => false,
]);

Я не думаю, что это правильный способ передать ALL потому что он принимается непосредственно из pageSize (который является числом).

В случае отключения этот заголовок не будет добавлен.

Ответ 3

Здесь говорится, что вы можете получить все записи, если вы установите pageSize меньше 1.

Но pageSize должен находиться в диапазоне pageSizeLimit. pageSizeLimit имеет значение по умолчанию [1, 50], поэтому оно не может быть меньше 1, если вы не переопределите его.

return new ActiveDataProvider([
    'pagination' => [
        'pageSizeLimit' => [0, 50],
    ],
]);

Теперь вы можете установить значение pageSize равным 0, чтобы получить все записи.

Пример;

HTTP://локальный/пользователей на страницу = 0

Ответ 4

В изменении yii/rest/IndexAction.php

return new ActiveDataProvider([
        'query' => $modelClass::find(),
    ]);

в

return new ActiveDataProvider([
        'query' => $modelClass::find(),
        'pagination' => false,
    ]);

Все это.