Переопределение констант на основе слагаемых Codeigniter в модели на пользователя

У меня есть система управления контентом, где константы на основе слагов для соответствующих каталогов каждого вошедшего в систему пользователя определены для одного или всех контроллеров в модели. Я случайно наткнулся на эту находку, экспериментируя с переопределением констант для каждого вошедшего в систему пользователя.

Я не думал, что переопределение констант было возможно, но я не понимаю, как Codeigniter или PHP могут переопределять константы таким способом. Я не получаю никакой ошибки PHP, утверждающей, что не удалось переопределить константы, поэтому я должен верить, что экземпляр модели или контроллера не установлен для каждого контроллера?

контроллер:

class Content extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('main_model');

...
get slug from logged_in user
...

$this->main->set_slug_based_constants($slug)
}
}

Одна основная модель (я знаю, что это плохо):

class Main_model extends CI_Model{

public function set_slug_based_constants($slug)
{
define('CLOUDFRONT_DIRECTORY', $slug.'_cloudfront_directory');
}
}

Из Codeigniter Docs:
Динамическое внедрение. В CodeIgniter компоненты загружаются, а подпрограммы выполняются только по запросу, а не глобально.

Поэтому я хотел бы верить в то, что мое предположение в этом случае верно, основываясь на документах Codeigniter.

0

Решение

Это не столько «неустановлено», сколько «еще не определено». Каждый запрос браузера к URL (контроллеру) является уникальным процессом на сервере. Таким образом, константа не переопределяется, а создается заново для каждого запроса URL.

Если вы попытаетесь запустить $this->main_model->set_slug_based_constants($slug); во второй раз ты будут получить сообщение об ошибке PHP о том, что константа CLOUDFRONT_DIRECTORY уже определена.

Попробуйте эту версию контроллера, чтобы увидеть ошибку.

class Content extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('main_model');
$this->main_model->set_slug_based_constants("Dave");
}

function index()
{
echo "The constant's value is <strong>".CLOUDFRONT_DIRECTORY."</strong><br>";
$this->main_model->set_slug_based_constants("jruser");
echo "The constant's value is  <strong>".CLOUDFRONT_DIRECTORY."</strong><br>";;
}

}

Это будет производить что-то вроде этого.

Значение константы Dave_cloudfront_directory

Обнаружена ошибка PHP

Серьезность: Уведомление

Сообщение: константа CLOUDFRONT_DIRECTORY уже определена

Имя файла: models / Main_model.php

Номер строки: 13

Значение константы Dave_cloudfront_directory

1

Другие решения

Других решений пока нет …