2015-03-11 3 views
0

Я показываю данные для конечных пользователей в табличном формате. Я использую Laravel 5, а разбиение на страницы можно обрабатывать с легкостью.Неопределенная функция добавляет() в пользовательский Laravel 5 paginator

Существует небольшое требование, когда дело доходит до того, где размещать эти ссылки страниц: я хочу их плавать вправо. Учитывая, что 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 s aying 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; 

ответ

1

Я снова проверил источник Laravel и выяснил, что происходит не так.

Это была моя ошибка в том, что мышление BootstrapThreePresenter реализует интерфейс Paginator, но это не так. Поэтому неправильно обращаться к appends() на объекте Presenter.

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

Вместо этого, я должен позвонить присоединяет() на экземпляре Paginator первый, в моем случае $ статьи, а затем передать его в пользовательский ведущий конструктор.

{!! with(new MyPresenter($paginatorObject->appends(array())))->render() !!} 
Смежные вопросы