我在哪里为Codeigniter(PHP)放置常量文件?

时间:2010-06-14 21:24:46

标签: php codeigniter

我有一个常量列表(我将它们用作枚举),一些是定义语句,有些只是全局变量。

我想将它们放在MVC框架中,以便我可以将它们用于我的模型和需要引用它的控制器?

我宁愿不把它粘在config / constants.php中,因为除了这个模型和使用它的控制器之外不应该调用它们。

编辑1:澄清

更具体地说,我有message_model模型,它有一堆我需要的常量存储在message_model_constants.php中。我应该在哪里放置message_model_constants.php并且有一种方法可以让控制器自动包含message_modelmessage_model不是(并且我不希望它)时自动包含它加载。

编辑2:

我真的不希望自动加载常量,除非我使用模型

5 个答案:

答案 0 :(得分:5)

转到application/config/constants.php并定义你的常量,你可以在CI的模型 - 视图 - 控制器上使用常量而不包括“助手”和“库”

但在你的情况下,我更喜欢你创建一个包含常量的php文件,并将其重命名为my_constants_helper.php

在您的模型或控制器__construct

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

万岁,你可以访问它们=)

答案 1 :(得分:3)

在控制器中加载特定模型时,可以选择加载特定的配置文件。例如,在您的文件中:

application/controllers/messages.php

你会使用这样的一行:

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

如果您将它包含在控制器的顶部,就像这样

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

然后,所有这些常量都可用于给定控制器中的所有函数和方法。然后将每个配置调用为常量,如:

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

你可以命名受保护的$变量;在构造中以及更短的语法。

如果您在多个不同的控制器中使用这些配置常量和消息模型,您可能需要创建一个“库”文件,然后加载配置和模型并在那里声明所有变量。

答案 2 :(得分:2)

扩展Brennan Novak答案,您可以通过在模型构造函数中加载配置文件来简化代码。这样,您只需在控制器中加载模型,其他所有内容都会自动完成。

<强>模型

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 / config / message_model_constants.php

答案 3 :(得分:1)

对于全局配置,请添加到config/config.php或创建config/application.php,然后加载配置,然后加载项目。

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

答案 4 :(得分:0)

您是否考虑过将常量添加到Message_Model班级?然后,您将在班级内的self::ConstantName和班级外的Message_Model::ConstantName中引用它们。这也可以防止名称空间冲突。