【问题标题】:Pagination-URI in Codeigniter 4Codeigniter 4 中的分页 URI
【发布时间】:2020-10-27 07:49:52
【问题描述】:

我开始在 Codigniter 4 中编写一个 web 应用程序,目前我被分页卡住了。

我创建了一个控制器、一个模型和一个视图来检索用户组的数据库条目并使用 CI 的内置分页库。

用户组模型:

<?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;
    }

}

控制器(用户组):

<?php namespace App\Controllers;
use App\Models\UsergroupsModel;

class Usergroups extends BaseController
{
    public function index()
    {
        //Helper laden
        helper(['form','template','userrights']);
        $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';
            }
        }
        else
        {
            $data['userrights'] = $data['userrights'];
        }

        $model = new UsergroupsModel;
        $model->getGroups();
        $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');    
    }

       
    //--------------------------------------------------------------------

}

在视图中,我通过使用获得了分页

<?= $pager->links() ?>

默认分页工作正常,但我得到一个类似 https://DOMAIN.DE/usergroups?page=2 的 URI

在分页的官方 Codeigniter 4 文档中,您可以找到以下内容:

为页面指定 URI 段 也可以使用 URI 段作为页码,而不是页面查询参数。 >只需指定要用作第四个参数的段号。寻呼机生成的 URI 将 > 看起来像 https://domain.tld/model/[pageNumber] 而不是 https://domain.tld/model?page=[pageNumber].

::

$users = $userModel->paginate(10, ‘group1’, null, 3); 请注意:$segment 值不能大于 URI 段数加 1。

所以在我的控制器中我改变了

$data['usergroups'] = $model-&gt;paginate(5);

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

在视图中我添加了“测试”作为参数。

&lt;?= $pager-&gt;links('test') ?&gt;

在我添加的路线中

$routes-&gt;get('usergroups/(:num)', 'Usergroups::index/$1');

在控制器中我将索引函数更改为

public function index($segment = null)

从分页生成的 URI 现在如下所示:

https://DOMAIN.DE/usergroups/2

但它不会改变条目中的任何内容,并且分页本身总是坚持到第 1 页。

我认为,在切换到段 URI 时,我无法使用 CI 的内置库,因此我需要创建手动分页。

谁能帮我解决这个问题?

【问题讨论】:

    标签: php codeigniter pagination codeigniter-4


    【解决方案1】:

    版本 4.0.3 中似乎存在错误。所以它不能开箱即用。但我找到了解决方法:

    索引函数需要如下所示:

    public function index($page = 1)

    在 Controller 中,$data['usergroups'] 需要如下所示:

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

    其中 2 是 URI 中的页码段。

    像魅力一样工作。

    【讨论】:

      【解决方案2】:

      我目前在分页中使用分段时遇到了同样的问题。

      经过大量研究,我发现当您在案例“测试”中使用与组名关联的段时,您必须将段分配给变量 $ pager

      $pager->setSegment(2, 'nameOfGroup');
      

      您只需将第一个参数更改为您正在使用的分段编号,第二个参数更改为您分配的组的名称。

      【讨论】:

        猜你喜欢
        • 2012-06-07
        • 1970-01-01
        • 2012-11-26
        • 2020-07-18
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多