类分页器不存在 - Laravel

时间:2014-10-31 22:51:27

标签: php laravel laravel-4 pagination

我尝试使用Capsule创建自己的mysql数据库连接。我收到了Laravel的错误消息:

Class paginator不存在

然后我添加了一行代码:

$capsule->getContainer()->bind('paginator', 'Illuminate\Pagination\Paginator');

出现了另一条错误消息:

目标[Illuminate \ View \ ViewFinderInterface]不可实例化。

这是构造函数:

use Illuminate\Database\Capsule\Manager as Capsule;

public function __construct($params){

    $capsule = new Capsule;
    $params = array_merge(static::$baseParams, $params);
    $capsule->addConnection($params);
    //$capsule->getContainer()->bind('paginator', 'Illuminate\Pagination\Paginator');
    $this->db = $capsule->getConnection();
}

ps:

$this->db->table('table_name')->get() work!
$this->db->table('table_name')->paginate(4) doesn't work! 

如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

我通过在Laravel之外运行Eloquent得到了相同的错误消息。也许我的研究如何修复它对某人来说会很有趣。

Paginator 取决于3个模块:请求查看转换程序。第一个和最后一个模块初始化非常简单,但查看需要其他设置。所以我们需要手动初始化Paginator类和依赖项。

View类最难开始,但我们可以使用this tiny package将其初始化为独立组件。只需将"philo/laravel-blade": "2.*"添加到 composer.json 文件

即可

然后将 $ capsule-> getContainer() - > .... 替换为

    self::$capsule->getContainer()->bind('paginator', function() {
        // View initialization
        $views = __DIR__ . '/views';
        $cache = __DIR__ . '/cache';
        $blade = new \Philo\Blade\Blade($views, $cache);

        return new \Illuminate\Pagination\Factory(
            // Initialize and setup Request
            \Illuminate\Http\Request::createFromGlobals(),
            // Get ViewFactory instance
            $blade->view(),
            // Initialize Translator
            new \Symfony\Component\Translation\Translator('en')
        );
    });

现在您可以使用 paginate 方法。只需2个技巧。也许你需要设置一个基本网址:

$collection->setBaseUrl('http://example.com');

如果需要将集合转换为json格式,请使用json_encode($collection->toArray())

详细了解the magic of dependencies here