Codeigniter 4中的分页URI



我开始在Codinglighter 4中编写一个Web应用程序,目前,我一直在分页。

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

用户组模型:

<?php namespace AppModels;
use CodeIgniterModel;
class UsergroupsModel extends Model{
protected $table = 'roles';
protected $allowedFields = [];
protected $beforeInsert = ['beforeInsert'];
protected $beforeUpdate = ['beforeUpdate'];

public function getGroups(){
$db = ConfigDatabase::connect();
$builder = $db->table('roles');
$query   = $builder->get();
$results = $query->getResultArray();
return $results;
}
}

控制器(用户组(:

<?php namespace AppControllers;
use AppModelsUsergroupsModel;
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 = ConfigServices::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() ?>

默认的分页很好,但我得到了一个URIhttps://DOMAIN.DE/usergroups?page=2

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

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

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

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

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

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

在视图中,我添加了"test"作为参数。

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

在路线中,我添加了

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

在控制器中,我将索引功能更改为

public function index($segment = null)

从分页生成的URI现在看起来是这样的:

https://DOMAIN.DE/usergroups/2

但它不会更改条目中的任何内容,并且分页本身始终保持在第1页。

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

有人能帮我解决这个问题吗?

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

经过大量研究,我发现当你在你的情况下使用与群组名称相关联的片段时;测试";您必须将段分配给变量$pager

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

您只需要用正在使用的段编号更改第一个参数,用正在指定的组名称更改第二个参数。

4.0.3版本中似乎有一个错误。所以它不能开箱即用。但我找到了解决问题的方法:

索引函数需要如下所示:

public function index($page = 1)

在控制器中,$data["用户组"]需要如下所示:

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

其中2是URI中的页码的分段。

工作起来很有魅力。

相关内容

  • 没有找到相关文章