[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обсуждение ExampleCMS от chee
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
twin
Да не, суть то в принципе понятна, ничего особо сложного там нет. Но однако ты пишешь:
Цитата
И так, как у меня всё это модуль, даже система эта модуль с id 0, то перед вызовом session::set(), можно сделать mod::active(0), после чего можно будет работать с системной сессией, потому что в session есть mod::get(), который получает активный модуль
Допустим запускаем модуль регистрации. У тебя запишется сессия так допустим:

$_SESSION[1] = $array_userdata;


Потом мы переходим в модуль каталога. Там уже идет обращение к $_SESSION[5], а в ней нету данных юзера. Как так...

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
ApuktaChehov
Я думаю, что та часть системы которая отвечает за работу с сессиями, должна предоставлять интерфейс для работы с любыми данными, которые были переданы сессии.

Например модель работы с юзерами, имеет некое пространство имен в сесии(например $_SESSION['user_data']).
Соответственно, подпрограмма отвечающая за работу с сессией знает о том, что некий модуль зарегистрировал в ней некие данные. И по запросу любой части системы выдает эти данные.

В результате любая часть системы, которой необходимо знать вошел ли юзер в систему, или он все еще гость, может узнать это обратившись к единому интерфейсу, ну пример так: Session::get('user', 'role'). Где user это имя класс(модуля) который зарегистрировал эти данные, а role это элемент массива с ролью юзера.
Или можно пойти еще дальше, разработать интерфейс для работы с юзерами. Тогда может сделать так:

User::isGuest(); Но опять же как метод isGuest узнает, роль текущего юзера? Очень просто, спросит у Session::get('user', 'role').

Ну это все только один вариант реализации, придуманный с ходу.

_____________
Arh
Народ, я это даже не тестил толком =)
Но не стоит забывать что это всего лишь интерфейс, чистый PHP он не отменяет, если модулю или библиотеке нужно работать с какой то глобальной сессией, никто не мешает обращаться к $_SESSION на прямую.

Можно конечно сделать второй параметр типа Session::get('user', 'role'), с помощью которого можно обращаться к разным "областям видимости сессии" но это тема отдельного разговора.

Тема отдельного разговора
У меня также есть access::get(), config::get() итд
Методы, которые возвращают массив в виде объекта с настройками текущего модуля.

На данный момент к интерфейсам можно обращаться разными способами.
config::get() - вернёт настройки текущего модуля
config::get(1) - вернёт настройки модуля с id 1
config::get('name') - вернёт значение определённой настройки текущего модуля
config::get(1,'name') - вернёт значение определённой настройки модуля с id 1

И вот тут я задумался что слишком много вариантов обращения к методу, можно и запутаться, подумал сделать, или уже сделал непомню, вот так
config::get() - вернёт настройки текущего модуля
config::get(1) - вернёт настройки модуля с id 1
и всё
так как возвращается массив в виде объекта, к нему можно обратится вот так
config::get()->name - вернёт значение определённой настройки текущего модуля
равносильно
$Config = config::get();
$Config->name;

Но вот это config::get('name') тоже не хочется выпиливать, просто получается неоднозначность, где то так обратились, где то так.

Тут я подумал что лучше оставить один вариант, вот так config::get('name')
если надо работать с настройками системы или другого модуля, то вот так
echo config::get('name'); //Значение настройки текущего модуля
mod::active(1);
echo config::get('name'); //Значение настройки модуля с id 1
mod::active(2);
echo config::get('name'); //Значение настройки модуля с id 2


mod::active(0);
session::set('test','000');
mod::active(1);
session::set('test','111');
echo session::get('test'); //выведет 111
mod::active(0);
echo session::get('test'); //выведет 000


Но в таком случае, из строчки session::get('test'); не очень понятно локальная эта сессия или сессия другого модуля.
Короче я на эту тему запарился, но с этого момента до вторника не будет времени даже форум почитать =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.