CodeIgniter Forums
Pagination and segment URIs - Printable Version

+- CodeIgniter Forums (
+-- Forum: CodeIgniter 4 (
+--- Forum: CodeIgniter 4 Support (
+--- Thread: Pagination and segment URIs (/thread-76952.html)

Pagination and segment URIs - mboehmlaender - 07-06-2020

I began writing a webapp in Codigniter 4 and currently, i'm stuck with the pagination.
I created a controller, a model an a view to retrieve database entries für usergroups and used CI's built-in pagination-library.
<?php namespace App\Models;

use CodeIgniter\Model;

class UsergroupsModel extends Model{

    protected $table = 'roles';
    protected $allowedFields = [];
    protected $beforeInsert = ['beforeInsert'];
    protected $beforeUpdate = ['beforeUpdate'];

    public function getGroups(){
        $db = \Config\Database::connect();

        $builder = $db->table('roles');
        $query   = $builder->get();

        $results = $query->getResultArray();
        return $results;


Controller (Usergroups):
<?php namespace App\Controllers;
use App\Models\UsergroupsModel;

class Usergroups extends BaseController
    public function index()
        //Helper laden
        $data = [];
        $data['template'] = get_template();
        $data['info'] = [
            "active" => "menu_dash",
            "title" => "Dashboard",
            "icon" => "fab fa-fort-awesome fa-lg",
                        "sub" => "Frontend",
        //Check Permissions
        $data['userrights'] = get_userrights(session()->get('id'));
        if($data['userrights'][1] == 1)
            foreach($data['userrights'] as $key => $value){
            $data['userrights'][$key] =  '1';
            $data['userrights'] = $data['userrights'];

        $model = new UsergroupsModel;
        $pager = \Config\Services::pager();

        $data['usergroups'] = $model->paginate(5);
        $data['pager'] = $model->pager;

        //Create Views
        echo view($data['template'].'/templates/header', $data);
        echo view($data['template'].'/backend/navigation');
        echo view($data['template'].'/templates/sidebar');
        echo view($data['template'].'/backend/usergroups');
        echo view($data['template'].'/templates/footer');   



In the view, i got my pagination by using
<?= $pager->links() ?>

The default pagination works fine, but i get an URI like https://DOMAIN.DE/usergroups?page=2
In the official Codeigniter 4 docs for the pagination, you can find the following:
Quote:Specifying the URI Segment for Page It is also possible to use a URI segment for the page number, instead of the page query parameter. >Simply specify the segment number to use as the fourth argument. URIs generated by the pager would then >look like https://domain.tld/model/[pageNumber] instead of https://domain.tld/model?page=[pageNumber].:
$users = $userModel->paginate(10, ‘group1’, null, 3); Please note: $segment value cannot be greater than the number of URI segments plus 1.
So in my controller i changed
$data['usergroups'] = $model->paginate(5);

$data['usergroups'] = $model->paginate(5,'test',0,2);

and in the view i added 'test' as a parameter.
<?= $pager->links('test') ?>

In the Routes i added
$routes->get('usergroups/(:num)', 'Usergroups::index/$1');

and in the Controller i changed the index-function to
public function index($segment = null)

The URIs generated from the pagination now look like this:
but it does not change anything in the entries and the pagination itself alway sticks to page 1.
I think, i can not use CI's built in library when switching to segment-URIs and thus i need to create a manual pagination.

Can somebody help me to fix this problem?

RE: Pagination and segment URIs - jreklund - 07-06-2020

By the looks of things, there are a bug in 4.0.3, as the development version have changed how that feature works. And as of now (for you) it's broken. You need to load it manually for now.

PHP Code:
$data['usergroups'] = $model->paginate(5'test', (int) $segment); 

RE: Pagination and segment URIs - mboehmlaender - 07-06-2020

Great, that did the trick!

In the controller, i changed the function to

public function index($page = 1)

and the $data['usergroups']

$data['usergroups'] = $model->paginate(5, 'test', $page, 2);

Works like a charm Smile

RE: Pagination and segment URIs - jreklund - 07-07-2020

Great that it worked out for you, don't have an release date for then this is fixed and you don't need to manually assign it anymore.