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

Я разрабатываю приложение, используя 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??


person Janka    schedule 11.12.2014    source источник
comment
Это старый вопрос, но, на мой взгляд, серверная часть не должна возвращать всех пользователей в одном запросе, который со временем может стать очень большим. Вместо этого ваш внешний интерфейс должен перебирать все страницы (используя заголовок ссылки), пока не достигнет конца и не соединит все результаты.   -  person Benoît Bouré    schedule 14.05.2017


Ответы (5)


Если вы используете 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;
    }
}
person Wilianto Indrawan    schedule 27.06.2015

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

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

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

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

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

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

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

person arogachev    schedule 11.12.2014

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

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

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

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

Пример;

http://localhost/users?per-page=0

person Emirhan Marlalı    schedule 13.01.2016

код для элементов данных на странице индекса на странице в структуре yii2

вставьте код в файл models\ModelnameSearch.php в оператор $query

public $pageSize=10;

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'pagination' =>  ['pageSize' => $pageSize,],       
    ]);
person Anil Ram Ahir    schedule 08.02.2019

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

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

to

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

Это все.

person Jozsef Bicsak    schedule 15.09.2016
comment
Вы определенно не должны менять IndexAction.php внутри фреймворка. Представьте, что вы должны обновить свои зависимости, вам придется повторить изменение. Либо используйте для этого другие ответы, либо создайте свое собственное действие в качестве подкласса из класса выше и внесите там свои изменения. - person waza-ari; 19.01.2019