我开始在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中的页码的分段。
工作起来很有魅力。