自定义 Laravel 5 分页器中的未定义函数 append()


Undefined function appends() in custom Laravel 5 paginator

我以表格格式向后端用户显示数据。我正在使用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 接口中声明的,任何实现此接口的类都应该定义它。鉴于我的文章类扩展了 Eloquent,获取分页集合应该得到一个已经实现 appends() 的分页器。所以没有定义 append() 真的很奇怪。

这是我的存储库/服务层的代码,将分页数据返回到我的控制器。

$articles =  Article::with('category')
        ->select($columns)
        ->orderBy($column,$order)
        ->paginate($itemPerPage);
return $articles;

我再次检查了Laravel源代码,发现了哪里出了问题。

认为 BootstrapThreePresenter 实现了分页器接口是我的错误,但它没有。因此,在演示器对象上调用 appends() 是错误的。

{!! with(new MyPresenter($paginatorObject))->appends(array())->render() !!}

相反,我必须首先在分页器实例上调用 appends(),在我的例子中是$articles,然后将其传递给自定义表示器构造函数。

{!! with(new MyPresenter($paginatorObject->appends(array())))->render() !!}