Как построить API пагинации в Yii 1.x с помощью CPagination

1

Я новичок в yii. В настоящее время я создаю API для какого-то проекта. Мне удалось получить все данные из базы данных и отправить их как ответ на передний план. Теперь есть улучшение, которое я должен ограничить результаты, выводимые на страницу. Итак, разбивка на страницы. Я много читал о CPagination в yii, и независимо от того, что я пробовал, я получаю 500 внутренних ошибок сервера. Это мои коды;

    public function actionIndex()
{
    //getting page number from front end
    $request = file_get_contents('php://input');

    if (is_null($request)) {
        $page = 1;
    } else {
        $input = json_decode($request, true);
        $page = $input['page'];
    }

    //Criteria sorting templates by id DESC
    $criteria = new CDbCriteria;
    $criteria->order = 'id DESC';

    //Number of rows returned
    $count = TblTemplate::model()->count($criteria);

    //Templates per page
    $perPage = 2;

    //Calculating the offset
    $offset = ($page > 1) ? ($page * $perPage) - $perPage : 0;

    $pages = new CPagination($count);
    $pages->pageSize = $perPage;
    $pages->offset   = $offset;
    $pages->applyLimit($criteria);

    //fetching all templates    
    $templates = TblTemplate::model()->findAll($criteria);

    $response = [];

    //Fetching all array - filtering through the cluster
    foreach ($templates as $template) {
        $response[] = [
            'id'      => $template->id,
            'name'    => $template->name,
            'email'   => $template->email,
            'content' => $template->content 
        ];
    }

    echo json_encode($response);
}

Спасибо за вашу помощь.

  • 0
    Почему бы не попробовать offset и limit в CDbCriteria
  • 0
    Позвольте мне попробовать это, но из yii документов, pageSize и offset должны быть на объекте Cpagination
Показать ещё 1 комментарий
Теги:
pagination
yii

1 ответ

1
Лучший ответ

Измените это как: -

    $perPage = 2;
    $offset = ($page > 1) ? ($page * $perPage) - $perPage : 0;

    $criteria = new CDbCriteria;
    $criteria->order = 'id DESC';
    $criteria->limit=$perPage;
    $criteria->offset=$offset;

    $templates = Users::model()->findAll($criteria);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню