使用 PHP8 迁移 Codeigniter 3 时没有有效的 "up" 方法

No working "up" method in migrate Codeigniter 3 with PHP8

我刚开始使用 CodeIgniter 3,我知道它已经过时了,但任务已设置为使用它。而我马上就有问题了,翻遍了网络也没有找到答案。

在我看来,我只是遗漏了一个小细节。请帮助指导我走上正确的道路。

迁移:

class Migration_Add_blog extends CI_Migration {

    public function up()
    {
        $this->dbforge->add_field(array(
            'id' => array(
                'type' => 'INT',
                'unsigned' => TRUE,
                'auto_increment' => TRUE
            ),
            'title' => array(
                'type' => 'TEXT',
                'null' => TRUE,
            ),
       ));
        $this->dbforge->add_key('id', TRUE);
        $this->dbforge->create_table('blog');
   }

Migrate.php

public function index()
    {
        $this->load->library('migration');

        if (!$this->migration->version(1))
        {
            show_error($this->migration->error_string());
        }
    }

migration.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');


$config['migration_enabled'] = TRUE;

$config['migration_type'] = 'sequential';

$config['migration_table'] = 'migrations';


$config['migration_auto_latest'] = FALSE;

$config['migration_version'] = 1;


$config['migration_path'] = APPPATH.'migrations/';

我的错误:

The migration class "Migration_Add_blog" is missing an "up" method.

为了解决这个问题,我们不得不更深入地研究名为 'CI_Migration' 的父 class。 我有 php8.0,它与默认的 Codeigniter 3.2.0-dev 设置不正确,正好是行:

elseif ( ! is_callable(array($class, $method)))

在文件 system/libraries/Migration.php

但在 3.1.0 版本中,这一行看起来像这样。

elseif ( ! in_array($method, array_map('strtolower', get_class_methods($class))))

正是这个选项起作用了。