2017-07-17 99 views
0

我正在开发部署在不同位置的应用程序。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值)

+0

您可能想要显示一些代码并解释“某些控制器的工作方式不同”_是什么意思? –

+0

只是,一些函数会有一些不同的结果 - 根据参数我可以预测它们会改变(所以把所有东西都放在配置文件中不是一个解决方案) – jacksbox

+1

这对我们根本没有任何帮助。你在说什么方法?这可能发生什么情况?你的意思是什么“不同的结果”?请用_some real info_更新您的问题。 –

回答

0

如果你只是改变变量,那么不要根据location(又名独立的环境)重写你的类,而是尝试使用环境变量。对于这一点,我会建议一旦它被安装通过作曲家

composer require vlucas/phpdotenv 

使用DotEnv库,加载引导文件

的index.php

require_once './vendor/autoload.php'; 

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

/* 
* -------------------------------------------------------------------- 
* LOAD THE BOOTSTRAP FILE 
... 
之前在底部添加到您的 index.php

一旦建立,您可以使用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可以自动加载。