【问题标题】:Undefined function appends() in custom Laravel 5 paginator自定义 Laravel 5 分页器中的未定义函数 appends()
【发布时间】:2015-05-12 15:24:27
【问题描述】:

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

在我通过调用 appends() 在这些链接中添加一些参数之前,Laravel 可以正常工作,例如:

{!!  with(new App\Http\Presenters\DatatablePaginationPresenter($articles))->appends(['sort' => $column,'order' => $order,'term' => $term])->render() !!}

这一次我得到一个 FatalException 说 Call to undefined method App\Http\Presenters\DatatablePaginationPresenter::appends()

我浏览了一些源代码以了解 appends() 的工作原理。它在 \Illuminate\Contracts\Pagination\Paginator 接口中声明,任何实现该接口的类都应该定义它。鉴于我的 Article 类扩展了 Eloquent,获取分页集合应该得到一个已经实现 appends() 的分页器。 所以没有定义 appends() 真的很奇怪。

这是我的 repo/service 层将分页数据返回到我的控制器的代码。

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

return $articles;

【问题讨论】:

    标签: php laravel pagination laravel-5


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 2018-07-11
      相关资源
      最近更新 更多