我有一个常量列表(我将它们用作枚举),一些是定义语句,有些只是全局变量。
我想将它们放在MVC框架中,以便我可以将它们用于我的模型和需要引用它的控制器?
我宁愿不把它粘在config / constants.php中,因为除了这个模型和使用它的控制器之外不应该调用它们。
编辑1:澄清
更具体地说,我有message_model
模型,它有一堆我需要的常量存储在message_model_constants.php
中。我应该在哪里放置message_model_constants.php
并且有一种方法可以让控制器自动包含message_model
当message_model
不是(并且我不希望它)时自动包含它加载。
编辑2:
我真的不希望自动加载常量,除非我使用模型
答案 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
中引用它们。这也可以防止名称空间冲突。