[英]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.