Я пытаюсь сделать глобальным $_SESSION
доступным внутри контроллеров моей фреймворка, написанных с нуля. Это не совсем MVC, уровень представления состоит из двух родительских классов с несколькими дочерними классами.
Не вдаваясь в подробности, мои взгляды оказываются в class Template
class Template{
protected $_controller;
protected $_action;
function __construct($controller,$action) {
$this->_controller = $controller;
$this->_action = $action;
}
function render(){
if (file_exists(APP_ROOT . DS . 'app' . DS . 'view' . DS . $this->_controller . DS . $this->_action . '.php')) {
include (APP_ROOT . DS . 'app' . DS . 'view' . DS . $this->_controller . DS . $this->_action . '.php');
}
}
}
Тогда я звоню Template::render()
в деструктора в моем родительском контроллере после инстанцировании class Template
в конструкторе. Все классы автоматически загружаются.
class CoreController {
protected $_controller;
protected $_action;
protected $_template;
function __construct($controller, $action) {
$this->_controller = ucfirst($controller);
$this->_action = $action;
$this->_template = new Template($controller,$action);
}
function __destruct() {
$this->_template->render();
}
}
Мой вопрос, как я могу сделать $_SESSION
доступны в CoreController
и когда именно он доступен во время процедуры выключения? Я пробовал называть его непосредственно в CoreController
, а также в пределах Template::render()
и всегда получать неопределенные предупреждения переменных, однако определение $_SESSION
в моих представлениях работает. Обоснованием этого является то, что я хотел бы установить определенные переменные на основе того, установлен ли идентификатор сеанса, и я бы хотел сохранить основную логику представления в своих контроллерах. Заранее спасибо.
Просто позвоните session_start во время начальной загрузки фазы процесса, и вы должны быть в состоянии получить на него в течение срока запроса – Orangepill
Ваше предложение отлично работает, спасибо еще раз! ваш совет сервера на днях был спасателем. Интересно, должен ли я делать то, что предложил тереско, и использовать его в пределах слоя модели, что, вероятно, будет связано с отправкой его через диспетчера, который кажется лучшим подходом, если я буду придирчивым. – dcd0181
IMHO принадлежит к контроллеру. Если вы поместите его в модальный, вы создаете зависимость между модальным и используемым шаблоном, который требует сеанса, поэтому использование модального слова в сценарии было бы невозможным. – Orangepill