簡體   English   中英

Laravel 4-在一頁上使用多個分頁器

[英]Laravel 4 - Using multiple paginators on one page

我一直在搜尋這個問題,但找不到任何好的答案。 我發現有一個用於分頁器的名為setPageName()的方法,但它僅在像Paginator::setPageName('page')一樣使用時才有效。

我在Laravel API( http://laravel.com/api/class-Illuminate.Pagination.Environment.html )中查找了分頁器,該方法是一個公共函數,就像setBaseUrl一樣,我目前正在使用它,例如$albums->setBaseUrl('/album/');

例如,我想有一個照片分頁器(?photoPage = n)和一個注釋分頁器(?commentPage = n)。

有沒有我可以使用一個頁面上的URL中使用不同的頁面名稱的兩個paginators,或者至少調用任何方式setPageName()類似方法setBaseUrl()

實際上,這里有兩個課:

Factory類實際協調Paginator實例的創建的Paginator 快速瀏覽后,我無法真正告訴您為什么Factory類負責get/setPageName() ,但這就是它們所在的地方

似乎您需要兩個不同的Factory實例,幸運的是,可以通過IoC容器實現。 由於PaginationServiceProvider綁定到paginator ,因此兩次調用$app->make("Illuminate\\Pagination\\Factory")應該會生成兩個不同的工廠。 如果使用名稱空間,則服務提供者將工廠注入到控制器中可能類似於:

class DoublyPaginatedControllerServiceProvider extends ServiceProvider {
    public function register($app)
    {
        $this->bindShared('paginator.photos', function ($app) {
            $factory = $app->make('Illuminate\Pagination\Factory');
            $factory->setPageName('photoPage');
            return $factory;
        });

        $this->bindShared('paginator.comments', function ($app) {
            $factory = $app->make('Illuminate\Pagination\Factory');
            $factory->setPageName('commentPage');
            return $factory;
        });

        $this->app->bindShared('Namespace\DoublyPaginatedController', function ($app) {
            return new DoublyPaginatedController(
                $app['paginator.photos'],
                $app['paginator.comments']
            );
        }
    }
}

當然,這里的缺點是您不能使用Eloquent的Model::paginate() -您需要手動確定要獲取的項目集並將其傳遞給每個Factory的make()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM