2010-06-14 164 views
5

我有常量列表(我使用他們作爲一個枚舉),有些是定義語句,有的只是全局變量。我在哪裏可以爲Codeigniter(PHP)添加常量文件?

我在哪裏,我想將它們放在MVC框架,所以我可以使用他們兩個我的模型,我的控制器需要引用它?

我寧願不把它粘到配置/ constants.php,因爲他們不應該叫除了通過這個模型,並使用它的控制器。

編輯1:澄清

更具體地講,我有我的message_model模型,它包含了許多我需要存儲在message_model_constants.php常量。我應該在哪裏把message_model_constants.php是那裏有它自動加載message_model控制器包括當message_model不是辦法(我不希望它是)自動加載。

編輯2:

我真的不希望有常量自動加載,除了當我使用該模型

回答

2

延伸布倫南諾瓦克的回答,您可以通過加載您的配置文件中的模型構造簡化代碼。這樣,您只需在控制器中加載模型,其他任何事情都會自動完成。

型號

class Message_model extends Model { 

    function __construct() 
    { 
     parent::Model(); 
     $this->load->config('message_model_constants'); 
    } 
... 
} 

控制器

class Some_controller extends Controller { 

    function __construct() 
    { 
     parent::Controller(); 
     $this->load->model('message_model'); 
    } 
... 
} 

如前所述,你的配置文件應該是application /配置/ message_model_constants.php

1

對於全局CONFIGS,添加到config/config.php或創建config/application.php和然後加載配置,然後加載該項目。

$this->config->load('application'); // or autoload this - $autoload['config'] = array('application'); 
$this->config->item('item name'); 
3

當您在控制器中加載特定模型時,您可以選擇加載特定的配置文件。例如,在你的文件:在您的控制器的這樣

function __construct() { 
    $this->config->load('messages'); 
    $this->load->model('message_model'); 
} 

頂端如果您有它

$this->config->load('messages'); 

然後,所有的:

application/controllers/messages.php 

你會使用這樣的行這些常量將可用於給定控制器中的所有功能和方法。然後你打電話給每個配置常量,如:

$this->config->item('item name') 

而且你可以命名受保護的$變量;在構造中以及更短的語法。

如果您在多個不同的控制器中使用這些配置常量和消息模型,您可能需要創建一個「庫」文件,然後加載配置和模型並在其中聲明所有變量。

0

你有沒有考慮只是增加你的常量你Message_Model類?然後,您將在班級以外的課程中使用self::ConstantName並在課程以外使用Message_Model::ConstantName。這也可以防止名稱空間相撞。

+0

我不認爲這作品基於Codeigniter如何加載模型。 – wag2639 2010-06-16 05:15:11

4

轉到application/config/constants.php和定義不變的,你可以使用CI的模型 - 視圖 - 控制器的常量不包括「助手」和「庫」

但在你的情況下,我更喜歡你創建一個PHP有你的常量的文件,並將其重命名爲my_constants_helper.php

在你的模型或控制器__construct只是

$this->load->helper('my_constants'); 

而且萬歲,你可以訪問它們=)

+0

真棒技巧...像魅力工作... – user311509 2012-08-19 07:38:54

相關問題