Куда мне поместить файл констант для Codeigniter (PHP)?
У меня есть список констант (я использую их в качестве перечисления), некоторые из них являются операторами define, а некоторые-просто глобальными переменными.
Где я должен поместить их в структуру MVC, чтобы я мог использовать их как для моей модели, так и для моего контроллера, который должен ссылаться на нее?
Я бы предпочел не вставлять его в config / constants.php, так как они не должны вызываться, за исключением этой модели и контроллеров, которые ее используют.
Правка 1: Уточнение
Если быть более точным, у меня есть мой message_model модель и она имеет кучу констант, которые мне нужны, которые хранятся в message_model_constants.php. Где я должен поместить message_model_constants.php и есть ли способ, чтобы он автоматически включался контроллером, который загружает message_model, когда message_model Не загружается автоматически (и я не хочу, чтобы это было).
Правка 2:
Я действительно не хочу, чтобы константы автоматически загружались, за исключением случаев, когда я использую модель
5 ответов:
Расширяя ответ Бреннана Новака,вы можете упростить свой код, загрузив конфигурационный файл в конструктор модели. Таким образом, вам нужно только загрузить модель в контроллеры, и все остальное будет сделано автоматически.
Модель
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
Перейдите к
Но в вашем случае я бы предпочел, чтобы вы создали php-файл с вашими константами и переименовали его в что-то вродеapplication/config/constants.phpи определите свою константу, и вы можете использовать свои константы на Model-View-Controller CI, не включая "Helper " и"Library"my_constants_helper.php.В вашей модели или контроллере
__constructПросто$this->load->helper('my_constants');И ура вы можете получить к ним доступ =)
Вы можете выбрать загрузку конкретного конфигурационного файла при загрузке конкретной модели в контроллер. Например, в вашем файле:
application/controllers/messages.phpВы бы использовали такую строку:
$this->config->load('messages');Если вы включаете его в верхней части вашего контроллера, как это
Тогда все эти константы будут доступны для всех функций и методов в данном контроллере. Затем вы вызываете каждую константу конфигурации следующим образом:function __construct() { $this->config->load('messages'); $this->load->model('message_model'); }$this->config->item('item name')И вы можете назвать защищенные переменные$; в конструкции а также для более короткого синтаксиса.
Если вы используете эти константы конфигурации и модель сообщений в нескольких различных контроллерах, вы можете создать файл "библиотека", который затем загружает конфигурацию и модель и объявляет все переменные там.
Для глобальных конфигураций добавьте в
config/config.phpили создайтеconfig/application.php, а затем загрузите конфигурацию, а затем элемент.$this->config->load('application'); // or autoload this - $autoload['config'] = array('application'); $this->config->item('item name');
Вы рассматривали возможность просто добавить ваши константы к вашему классу
Message_Model? Затем вы будете ссылаться на них черезself::ConstantNameвнутри класса иMessage_Model::ConstantNameвне класса. Это также предотвратит столкновение пространства имен.
Comments