首页 文章

未定义的函数在自定义Laravel 5 paginator中附加()

提问于
浏览
0

我以表格格式向后端用户显示数据 . 我正在使用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;

1 回答

  • 1

    我再次检查了Laravel源,发现了什么问题 .

    我错误地认为BootstrapThreePresenter实现了Paginator接口,但事实并非如此 . 因此在Presenter对象上调用appends()是错误的 .

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

    相反,我必须首先在Paginator实例上调用appends(),在我的例子中是$ articles,然后将它传递给自定义presenter构造函数 .

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

相关问题