php - Laravel 5 - 漂亮的分页器

标签 php laravel pagination laravel-5

所以我试图在 Laravel 5 中使用像 localhost/ads/1 这样漂亮的 url 来获得分页,其中 1 代表页面.

据我了解,这样的操作需要重载 AbstractPaginatorLengthAwarePaginator,以修改 Database\Query\Builder.

我是否遗漏了什么,绑定(bind)或依赖注入(inject),或者是否应该有可能更改我们想要使用的分页器?

最佳答案

最后,我不得不自己编写一个分页器。我在这里发布我的解决方案,它应该对任何人有帮助。

请注意,该解决方案虽然具有功能性,但在实际使用中需要注意(关于验证);此处简化了该类以突出该机制。

<?php namespace App\Services;

use Illuminate\Support\Collection;
use Illuminate\Pagination\BootstrapThreePresenter;
use Illuminate\Pagination\LengthAwarePaginator as BasePaginator;

class Paginator extends BasePaginator{



     /**
     * Create a new paginator instance.
     *
     * @param  mixed  $items
     * @param  int  $perPage
     * @param  string $path Base path
     * @param  int $page
     * @return void
     */
    public function __construct($items, $perPage, $path, $page){
        // Set the "real" items that will appear here
        $trueItems = [];

        // That is, add the correct items
        for ( $i = $perPage*($page-1) ; $i < min(count($items),$perPage*$page) ; $i++ ){
            $trueItems[] = $items[$i];
        }

        // Set path as provided
        $this->path = $path;

        // Call parent
        parent::__construct($trueItems,count($items),$perPage);

        // Override "guessing" of page
        $this->currentPage = $page;
    }

    /**
     * Get a URL for a given page number.
     *
     * @param  int  $page
     * @return string
     */
    public function url($page){
        if ($page <= 0) $page = 1;

        return $this->path.$page;
    }
}

要使用该类,可以定义一个路由

Route::get('items/{page}','MyController@getElements');

然后在上述 Controller 中,在 getElements 中:

$items = new Paginator(Model::all(),$numberElementsPerPage,url('items'),$page);

然后,您可以像往常一样处理您的元素。 注意:我添加了一个路径选项,以便集成更复杂的漂亮 url 设计。 希望对您有所帮助!

关于php - Laravel 5 - 漂亮的分页器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27687481/

相关文章:

Laravel 5.2 自定义助手未找到

java - 使用连接表在 Hibernate 中分页

jquery - 如何设置 Twitter Bootstrap 分页的页面内容

php - 使用 Ajax 动态加载内容

php - 使用 PHP 删除字符串的一部分

php - 客户端如何在ssl连接中生成公钥?

javascript - 使用 PHP 的通用网站爬虫

php - 调用未定义的方法 stdClass::save()

javascript - 防止刷新 map 时从图层中删除标记

javascript - 如何在父div下的所有div中写入内容?