使用 Twig 和 Eloquent-5.2 进行分页
Pagination with Twig and Eloquent-5.2
在学习了使用 Slim/Twig 和 Eloquent 5.2 构建 PHP Authentication System 的视频教程后。
我已经完成了视频教程并拥有了一个可以工作的系统。
但是我未能将分页添加到教程 25th episode 上的所有用户列表。
似乎一切正常。但是当我按第 2、3、4 等页时...我仍然得到第 1 页数据。
这是我目前的代码:
routes/user/all.php
$app->get('/users', $authenticated(), function() use ($app) {
$users = $app->user->where('active', true)->paginate(5);
$users->setPath($app->urlFor('user.all'));
$app->render('user/all.php', [
'users' => $users
]);
})->name('user.all');
view/user/all.php
{% extends 'templates/default.php' %}
{% block title %}All Users{% endblock %}
{% block content %}
<h4>All Users</h4>
{% if users is empty %}
<p>No registered users</p>
{% else %}
{% for user in users %}
<div class="user">
<a href="{{ urlFor('user.profile', {username: user.username}) }}"><img src="{{ user.getAvatarUrl({size: 18}) }}"> {{ user.username }}{% if user.getFullName %} | {{ user.getFullName }}{% endif %}</a>
{% if user.isAdmin() %}
[Admin]
{% endif %}
</div>
{% endfor %}
{{ users.render()|raw }}
{% endif %}
{% endblock %}
composer.json
{
"autoload": {
"psr-4": {
"A146\": "app/A146"
}
},
"require": {
"slim/slim": "~2.0",
"slim/views": "0.1.*",
"twig/twig": "~1.21",
"phpmailer/phpmailer": "~5.2",
"hassankhan/config": "0.8.*",
"illuminate/database": "5.*",
"illuminate/pagination": "5.*",
"alexgarrett/violin": "2.*",
"ircmaxell/random-lib": "~1.1",
"fzaninotto/faker": "*"
}
}
这是我得到的输出:
<div class="row">
<h4>All Users</h4>
<div class="user">
<a href="/pcb/public/u/Admin"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> Admin</a> [Admin]
</div>
<div class="user">
<a href="/pcb/public/u/Jamarcus22"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> Jamarcus22 | Abbie O'Hara</a>
</div>
<div class="user">
<a href="/pcb/public/u/jWalker"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> jWalker | Salvador Douglas</a>
</div>
<div class="user">
<a href="/pcb/public/u/Karelle00"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> Karelle00 | Harmon Ryan</a>
</div>
<div class="user">
<a href="/pcb/public/u/lCarter"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> lCarter | Lilly Stokes</a>
</div>
<ul class="pagination"><li class="disabled"><span>«</span></li> <li class="active"><span>1</span></li><li><a href="/pcb/public/users?page=2">2</a></li><li><a href="/pcb/public/users?page=3">3</a></li><li><a href="/pcb/public/users?page=4">4</a></li><li><a href="/pcb/public/users?page=5">5</a></li><li><a href="/pcb/public/users?page=6">6</a></li><li><a href="/pcb/public/users?page=7">7</a></li> <li><a href="/pcb/public/users?page=2" rel="next">»</a></li></ul>
</div>
非常感谢任何帮助!
嗯,已经一个月零几天了。我也遇到了你的问题,我刚刚得到了解决方案。
我所做的是,我调用了 Paginator
class 然后使用静态方法强制分页到我所在的任何页面。
Paginator::currentPageResolver(function() use ($current_page) {
return $current_page;
});
然后调用你要分页的数据。下面是我的全部代码。
<?php
use Illuminate\Pagination\Paginator;
$app->get('/controller/clients', $controllerAuthenticated(), function() use ($app) {
$request = $app->request;
$current_page = $request->get('page');
Paginator::currentPageResolver(function() use ($current_page) {
return $current_page;
});
$clients = $app->client->where(function($query) use ($client_name, $country_id) {
if ($client_name != '') {
$query->where('client_name', 'LIKE', '%'. $client_name .'%');
}
if ($country_id != '') {
$query->where('country_id', $country_id);
}
})
->orderBy('client_name', 'ASC')
->paginate(1);
$clients->setPath($app->urlFor('controller.client.all'));
$app->render('/controller/client/all.twig', [
'clients' => $clients,
'countries' => $countries,
'request' => $request
]);
})->name('controller.client.all');
虽然我忘记了我在哪里看到的答案,但我会 post 找到它后 link 作为参考。
在学习了使用 Slim/Twig 和 Eloquent 5.2 构建 PHP Authentication System 的视频教程后。
我已经完成了视频教程并拥有了一个可以工作的系统。 但是我未能将分页添加到教程 25th episode 上的所有用户列表。
似乎一切正常。但是当我按第 2、3、4 等页时...我仍然得到第 1 页数据。
这是我目前的代码:
routes/user/all.php
$app->get('/users', $authenticated(), function() use ($app) {
$users = $app->user->where('active', true)->paginate(5);
$users->setPath($app->urlFor('user.all'));
$app->render('user/all.php', [
'users' => $users
]);
})->name('user.all');
view/user/all.php
{% extends 'templates/default.php' %}
{% block title %}All Users{% endblock %}
{% block content %}
<h4>All Users</h4>
{% if users is empty %}
<p>No registered users</p>
{% else %}
{% for user in users %}
<div class="user">
<a href="{{ urlFor('user.profile', {username: user.username}) }}"><img src="{{ user.getAvatarUrl({size: 18}) }}"> {{ user.username }}{% if user.getFullName %} | {{ user.getFullName }}{% endif %}</a>
{% if user.isAdmin() %}
[Admin]
{% endif %}
</div>
{% endfor %}
{{ users.render()|raw }}
{% endif %}
{% endblock %}
composer.json
{
"autoload": {
"psr-4": {
"A146\": "app/A146"
}
},
"require": {
"slim/slim": "~2.0",
"slim/views": "0.1.*",
"twig/twig": "~1.21",
"phpmailer/phpmailer": "~5.2",
"hassankhan/config": "0.8.*",
"illuminate/database": "5.*",
"illuminate/pagination": "5.*",
"alexgarrett/violin": "2.*",
"ircmaxell/random-lib": "~1.1",
"fzaninotto/faker": "*"
}
}
这是我得到的输出:
<div class="row">
<h4>All Users</h4>
<div class="user">
<a href="/pcb/public/u/Admin"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> Admin</a> [Admin]
</div>
<div class="user">
<a href="/pcb/public/u/Jamarcus22"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> Jamarcus22 | Abbie O'Hara</a>
</div>
<div class="user">
<a href="/pcb/public/u/jWalker"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> jWalker | Salvador Douglas</a>
</div>
<div class="user">
<a href="/pcb/public/u/Karelle00"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> Karelle00 | Harmon Ryan</a>
</div>
<div class="user">
<a href="/pcb/public/u/lCarter"><img src="http://www.gravatar.com/avatar/...?s=18&d=identicon"> lCarter | Lilly Stokes</a>
</div>
<ul class="pagination"><li class="disabled"><span>«</span></li> <li class="active"><span>1</span></li><li><a href="/pcb/public/users?page=2">2</a></li><li><a href="/pcb/public/users?page=3">3</a></li><li><a href="/pcb/public/users?page=4">4</a></li><li><a href="/pcb/public/users?page=5">5</a></li><li><a href="/pcb/public/users?page=6">6</a></li><li><a href="/pcb/public/users?page=7">7</a></li> <li><a href="/pcb/public/users?page=2" rel="next">»</a></li></ul>
</div>
非常感谢任何帮助!
嗯,已经一个月零几天了。我也遇到了你的问题,我刚刚得到了解决方案。
我所做的是,我调用了 Paginator
class 然后使用静态方法强制分页到我所在的任何页面。
Paginator::currentPageResolver(function() use ($current_page) {
return $current_page;
});
然后调用你要分页的数据。下面是我的全部代码。
<?php
use Illuminate\Pagination\Paginator;
$app->get('/controller/clients', $controllerAuthenticated(), function() use ($app) {
$request = $app->request;
$current_page = $request->get('page');
Paginator::currentPageResolver(function() use ($current_page) {
return $current_page;
});
$clients = $app->client->where(function($query) use ($client_name, $country_id) {
if ($client_name != '') {
$query->where('client_name', 'LIKE', '%'. $client_name .'%');
}
if ($country_id != '') {
$query->where('country_id', $country_id);
}
})
->orderBy('client_name', 'ASC')
->paginate(1);
$clients->setPath($app->urlFor('controller.client.all'));
$app->render('/controller/client/all.twig', [
'clients' => $clients,
'countries' => $countries,
'request' => $request
]);
})->name('controller.client.all');
虽然我忘记了我在哪里看到的答案,但我会 post 找到它后 link 作为参考。