Codeigniter 3应用程序:如果数据库中没有表,则重定向到某个控制器

时间:2018-10-08 19:00:48

标签: php codeigniter codeigniter-3

我正在使用 Codeigniter 3.1.8 Bootstrap 4 开发一个基本的博客应用程序。

我使用迁移文件(从001_create_authors.php005_create_comments.php)自动创建必要的数据库表。

运行迁移的控制器位于

  

application / controllers / Migrate.php

它具有如下代码:

class Migrate extends CI_Controller
{
  public function __construct()
  {
    parent::__construct();
  }

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

    if($this->migration->current() === FALSE)
    {
      show_error($this->migration->error_string());
    }
    else {
      echo 'Migration executed';
    }
  }
}

默认控制器是Posts控制器,如routes.php文件所示:$route['default_controller'] = 'posts';

如果数据库中没有表,我希望Posts控制器重定向到Migrate。 Codeigniter是否具有确定是否没有表的方法?我该怎么用?

2 个答案:

答案 0 :(得分:3)

https://www.codeigniter.com/user_guide/database/metadata.html

if (count($this->db->list_tables()) == 0) {
    redirect(...);
}

答案 1 :(得分:0)

我以这种确切的方式得到了预期的结果:

在“帖子”控制器中(默认):

public function index() {
  // Create all the database tables if there are none
  // by redirecting to the Migrations controller
    if (count($this->db->list_tables()) == 0) {
       redirect('migrate');
     }
     // More code
}

在“迁移”控制器中:

class Migrate extends CI_Controller
{
  public function __construct()
  {
    parent::__construct();
  }

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

    if($this->migration->current() === FALSE)
    {
      show_error($this->migration->error_string());
    }
    else {
      $this->session->set_flashdata('tables_created', "All the required database tables have been created. You can now register.");
      redirect('/');
    }
  }
}