我以表格格式向后端用户显示数据。我正在使用Laravel 5,并且可以轻松处理分页。
对于放置这些页面链接的位置有一个小要求:我想将它们正确地浮动。考虑到Laravel使用Bootstrap 3来渲染布局,我知道我可以简单地将“pull-right”类添加到元素中。
所以我构建了一个自定义分页展示器,如下所示:
namespace App\Http\Presenters;
use Illuminate\Pagination\BootstrapThreePresenter;
class DatatablePaginationPresenter extends BootstrapThreePresenter{
public function render()
{
if ($this->hasPages())
{
return sprintf(
'<ul class="pagination pull-right">%s %s %s</ul>',
$this->getPreviousButton(),
$this->getLinks(),
$this->getNextButton()
);
}
return '';
}
}
模板文件中的代码:
<div class="row">
<div class="col-md-4">Some text</div>
<div class="col-md-8">
{!! with(new App\Http\Presenters\DatatablePaginationPresenter($articles))->render() !!}
</div>
</div>
Laravel工作没有错误,直到我通过调用appends()在这些链接中添加一些参数,例如:
{!! with(new App\Http\Presenters\DatatablePaginationPresenter($articles))->appends(['sort' => $column,'order' => $order,'term' => $term])->render() !!}
这次我得到一个FatalException,说调用未定义的方法App \ Http \ Presenters \ DatatablePaginationPresenter :: appends()
我浏览了一些源代码,了解appends()的工作原理。它在\ Illuminate \ Contracts \ Pagination \ Paginator接口中声明,并且任何类实现此接口都应该定义它。鉴于我的Article类扩展了Eloquent,获取一个paginated集合应该得到一个已经实现appends()的paginator。 因此,定义append()非常奇怪。
这是我的repo / service层的代码,它将分页数据返回给我的控制器。
$articles = Article::with('category')
->select($columns)
->orderBy($column,$order)
->paginate($itemPerPage);
return $articles;
答案 0 :(得分:1)
我再次检查了Laravel来源,发现了什么问题。
我错误地认为BootstrapThreePresenter实现了Paginator接口,但事实并非如此。因此,在Presenter对象上调用appends()是错误的。
{!! with(new MyPresenter($paginatorObject))->appends(array())->render() !!}
相反,我必须首先在Paginator实例上调用appends(),在我的例子中是$ articles,然后将它传递给自定义的presenter构造函数。
{!! with(new MyPresenter($paginatorObject->appends(array())))->render() !!}