【发布时间】: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->paginate(5);
到
$data['usergroups'] = $model->paginate(5,'test',0,2);
在视图中我添加了“测试”作为参数。
<?= $pager->links('test') ?>
在我添加的路线中
$routes->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