2017-07-17 97 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可以自動加載。