【问题标题】:Laravel 4 - Using multiple paginators on one pageLaravel 4 - 在一个页面上使用多个分页器
【发布时间】:2014-08-21 06:17:12
【问题描述】:

我一直在谷歌上搜索这个问题,但找不到任何好的答案。我发现分页器有一个名为setPageName() 的方法,但它只在像Paginator::setPageName('page') 这样使用时才有效。

我在 Laravel API (http://laravel.com/api/class-Illuminate.Pagination.Environment.html) 中查找了分页器,该方法是一个公共函数,就像我目前使用的 setBaseUrl 一样 $albums->setBaseUrl('/album/');

例如,我想要一个照片分页器 (?photoPage=n) 和一个评论分页器 (?commentPage=n)。

有什么方法可以在一个页面的 URL 中使用两个使用不同页面名称的分页器,或者至少调用 setPageName() 方法,如 setBaseUrl()

【问题讨论】:

    标签: php laravel-4 pagination


    【解决方案1】:

    这里实际上有两个类在起作用:

    Factory 类实际上协调了Paginator 实例的创建。快速浏览后,我真的无法告诉你为什么Factory 类负责get/setPageName(),而是that's where they live

    您似乎需要两个不同的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() 方法。

    【讨论】:

    • 也就是说,制作手动分页器会更容易吗?感谢您提供良好而彻底的答案!
    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 2015-05-17
    • 2016-06-13
    • 2017-07-08
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多