Codeigniter覆盖自己的控制器

时间:2017-07-17 13:56:56

标签: php codeigniter

我正在处理部署在不同位置的应用程序。

根据位置,某些控制器/模型/视图中的某些功能的工作方式不同,有没有办法覆盖/扩展这些类? (我不想直接更改代码库,因为它会在将来的版本中导致问题) 我正在寻找类似于MY_覆盖核心类/函数的方法。

由于我无法展示实际代码,这里有一个我想要实现的简单示例:

普通基本控制器,在大多数部署中使用:

class SomeController extends CI_Controller {
    ...
    public function index() 
    {
        $data['var'] = 10;
        $this->load->view('someview',$data);
    }
    ...
}

以下是位置上的特殊控制器的外观:

class SomeController extends CI_Controller {
    ...
    public function index() 
    {
        $data['var'] = 5;
        $this->load->view('someview',$data);
    }
    ...
}

(在这种情况下,唯一的变化是在var值中)

1 个答案:

答案 0 :(得分:0)

如果您只是更改变量,而不是基于location(a.k.a独立环境)覆盖您的类,请尝试使用环境变量。为此,我建议通过composer

使用DotEnv
composer require vlucas/phpdotenv

安装完成后,在加载引导程序文件之前将其添加到底部的index.php

<强>的index.php

require_once './vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
...

设置完成后,您可以使用getEnv()函数检索变量:

.env示例

CONTROLLER_VAR=5
DB_HOST=localhost
DB_PORT=3306
...

<强> SomeController

class SomeController extends CI_Controller {
    ...
    public function index() 
    {
        $data['var'] = getEnv("CONTROLLER_VAR");
        $this->load->view('someview',$data);
    }
    ...
}

还要确保自动加载Composer。