You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eloquent 5.5 paginate()在Laravel外部(CodeIgniter)无法使用

解决CodeIgniter中使用Illuminate\Database Eloquent 5.5 paginate()失效的问题

我之前在脱离Laravel环境用Eloquent的paginate方法时也踩过同样的坑,核心原因是分页功能依赖Laravel的请求实例、容器以及分页组件支持,而默认的Capsule初始化并没有配置这些依赖项。下面是一步步的解决办法:

1. 安装缺失的依赖包

Eloquent 5.5的paginate需要依赖illuminate/pagination和illuminate/http两个包,先通过Composer安装:

composer require illuminate/pagination:5.5.* illuminate/http:5.5.*

注意版本要和你的illuminate/database保持一致(5.5.x),避免版本冲突。

2. 完善Capsule的初始化配置

修改你的Capsule类,补充容器、请求实例和事件调度器的配置,让分页能获取到当前页码参数:

use Illuminate\Database\Capsule\Manager as CapsuleManager;
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
use Illuminate\Http\Request;

class Capsule extends CapsuleManager {
    public function __construct() {
        parent::__construct();
        require_once __DIR__.'/../config/database.php';
        $db = (object) $db['default'];
        
        // 添加数据库连接
        $this->addConnection(array(
            'driver' => 'mysql',
            'host' => $db->hostname,
            'database' => $db->database,
            'username' => $db->username,
            'password' => $db->password,
            'charset' => $db->char_set,
            'collation' => $db->dbcollat,
            'prefix' => $db->prefix,
        ));
        
        // 初始化容器和事件调度器
        $container = new Container();
        $this->setContainer($container);
        
        // 绑定请求实例到容器:用CodeIgniter的全局请求参数初始化Illuminate Request
        $container->bind('request', function () {
            $request = new Request();
            $request->initialize($_GET, $_POST, [], $_COOKIE, $_FILES, $_SERVER);
            return $request;
        });
        
        // 设置事件调度器
        $this->setEventDispatcher(new Dispatcher($container));
        
        // 启动Eloquent
        $this->bootEloquent();
    }
}

这里的关键是把Illuminate\Http\Request绑定到容器,让分页组件能从请求中读取page参数。

3. 处理分页视图渲染

Laravel默认的分页视图是基于Blade模板引擎的,在CodeIgniter里无法直接使用,你有两种选择:

选项一:自定义PHP分页视图

  1. 在CodeIgniter的views目录下创建一个pagination.php文件,内容参考Laravel的分页HTML结构,把Blade语法改成原生PHP:
<?php if ($paginator->hasPages()): ?>
<ul class="pagination">
    {{-- 上一页链接 --}}
    <?php if ($paginator->onFirstPage()): ?>
        <li class="disabled"><span>&laquo;</span></li>
    <?php else: ?>
        <li><a href="<?php echo $paginator->previousPageUrl(); ?>" rel="prev">&laquo;</a></li>
    <?php endif; ?>

    {{-- 页码元素 --}}
    <?php foreach ($elements as $element): ?>
        <?php if (is_string($element)): ?>
            <li class="disabled"><span><?php echo $element; ?></span></li>
        <?php endif; ?>

        <?php if (is_array($element)): ?>
            <?php foreach ($element as $page => $url): ?>
                <?php if ($page == $paginator->currentPage()): ?>
                    <li class="active"><span><?php echo $page; ?></span></li>
                <?php else: ?>
                    <li><a href="<?php echo $url; ?>"><?php echo $page; ?></a></li>
                <?php endif; ?>
            <?php endforeach; ?>
        <?php endif; ?>
    <?php endforeach; ?>

    {{-- 下一页链接 --}}
    <?php if ($paginator->hasMorePages()): ?>
        <li><a href="<?php echo $paginator->nextPageUrl(); ?>" rel="next">&raquo;</a></li>
    <?php else: ?>
        <li class="disabled"><span>&raquo;</span></li>
    <?php endif; ?>
</ul>
<?php endif; ?>
  1. 在使用分页时指定视图路径:
$users = \App\Models\User::paginate(10);
// 设置分页链接的基础路径(对应你的CI控制器方法)
$users->setPath('users/index');
// 指定自定义视图的路径
$users->setViewPath(APPPATH . 'views');
  1. 在CI视图中渲染分页:
<?php echo $users->render(); ?>

选项二:使用简单分页

如果不需要完整的页码列表,只需要上一页/下一页按钮,可以用simplePaginate()替代paginate(),这样不需要自定义视图,直接调用render()就能生成简单的分页链接:

$users = \App\Models\User::simplePaginate(10);

4. 测试分页功能

在CodeIgniter控制器中编写测试代码:

public function index()
{
    $this->load->library('capsule'); // 加载你的Capsule类
    $users = \App\Models\User::paginate(10);
    $users->setPath('users/index');
    $this->load->view('users/index', ['users' => $users]);
}

访问对应的控制器方法,就能看到正常分页的用户列表和分页链接了。

内容的提问来源于stack exchange,提问作者Ehs4n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:38:47