Zzepish
22.04.2016 - 14:39
Фишка такая: если я правильно понял ооп с MVC - мы не работаем с супер глобальными массивами ($_POS, $_GET, etc.). Но при авторизации пользователя мне нужно задать $_SESSION['user_id']. Чтоб он идентифицировал авторизировавшегося пользователя. Теперь вопрос: корректно ли в классе будет установить эту переменную, или есть другой вариант?
S.Chushkin
22.04.2016 - 14:44
Цитата (Zzepish @ 22.04.2016 - 14:39) |
не работаем с супер глобальными массивами |
Zzepish
22.04.2016 - 14:51
S.Chushkin
все данные собираються в роутере (у меня), и передаються как отдельный массив дальше. А не юзаем, чтоб не было потом искажения данных
S.Chushkin
22.04.2016 - 14:57
А, 100%-й ООП...
Ну так сделайте объект Session вместо встроенной возможности. В чём проблема то?
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
22.04.2016 - 15:00
>> А не юзаем, чтоб не было потом искажения данных
Вообще-то $_POST, $_GET и т.п. должны использоваться только на чтение, поэтому никаких "искажений" там не должно быть в принципе.
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
bestxp
22.04.2016 - 15:02
Ну в ооп плане у тебя есть некая допусти
class UserAuth {
public function __construct(ISessionStorage $storage){}
}
interface ISessionStorage {
public function set($key, $value);
public function get($key);
public function has($key);
public function remove($key);
}
а с чем работает класс имплементирующий ISessionStorage уже не важно) бд + куки или $_SESSION и тд)
внутри UserAuth ты обращаешься уже к методам хранилища)) а с чем он работает уже не важно))) с $_SESSION или вообще в бд хранит или в файле или в редисе)
Цитата |
Вообще-то $_POST, $_GET и т.п. должны использоваться только на чтение, поэтому никаких "искажений" там не должно быть в принципе.
|
Должны, но не обязаны, так как лучше закрыть оберткой чем потом от другого программиста получить подарок
Zzepish
22.04.2016 - 15:03
S.ChushkinНу да
Я ж хочу познать саму идеологию)
Ага. Т.е. Объект SESSION может на прямую работать с супер глобальной переменной SESSION? И это будет корректно с точки зрения идеологии?)
Цитата (S.Chushkin @ 22.04.2016 - 14:57) |
Ну так сделайте объект Session вместо встроенной возможности. В чём проблема то? |
+1
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Zzepish
22.04.2016 - 15:05
S.Chushkin
мало ли! кто-то напишет модуль, или покапаеться в коде, запилит в чужом модуле искажение какое-нить . А так - идет защита от такого)
bestxp
ага! спасибо)
S.Chushkin
22.04.2016 - 15:08
>> Теперь вопрос: корректно ли в классе будет установить эту переменную, или есть другой вариант?
Если "только ООП", то - нет.
Можно сделать оболочку над модулем сессий. Тут bestxp правильно сказал - что там внутри, по барабану. Извне это Объект.
Но в то же время, в ПХП нет 100% ООП, поэтому я бы допустил использование $_SESSION, если у Вас нет цели "100%-й ООП".
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
22.04.2016 - 15:12
Цитата (Zzepish @ 22.04.2016 - 15:05) |
А так - идет защита от такого) |
В ПХП нет "защиты от такого" - можно изменить всё что хочется
Защита только одна, - большой толстой линейкой по рукам.
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Zzepish
Цитата |
все данные собираються в роутере (у меня), и передаються как отдельный массив дальше. |
Можно поинтересоваться какие данные входят в этот массив, в каком виде он приходит в приложение?
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Zzepish
22.04.2016 - 15:20
S.Chushkin
Цитата |
Если "только ООП", то - нет. Можно сделать оболочку над модулем сессий. Тут bestxp правильно сказал - что там внутри, по барабану. Извне это Объект. Но в то же время, в ПХП нет 100% ООП, поэтому я бы допустил использование $_SESSION, если у Вас нет цели "100%-й ООП". |
тут вопрос идеологии :D я ж сейчас учусь, фактичеки. Хочу научиться писать правильно.
Насколько я понял - самый близкий идеологии ООП будет вариант с созданием Класса, для редактирования сессии.
Цитата |
В ПХП нет "защиты от такого" - можно изменить всё что хочется Защита только одна, - большой толстой линейкой по рукам.
|
Увы! Это так(
Arh
$router = new MainRouter($_POST, $_GET, $_SESSION, $_COOKIE, $_SERVER, $_FILES);
public function __construct($POST, $GET, $SESSION, $COOKIE, $SERVER, $FILES)
{
$this->inputData = compact('POST', 'GET', 'SESSION', 'COOKIE', 'SERVER', 'FILES');
$this->inputData['params'] = $routerData = $this->getRouterData($this->inputData['GET']);
Везде они фигурируют как $inputData
S.Chushkin
22.04.2016 - 15:53
Цитата (Zzepish @ 22.04.2016 - 15:20) |
Насколько я понял - самый близкий идеологии ООП будет вариант с созданием Класса, для редактирования сессии. |
Правильно будет - объект "Сессия" со своими свойствами и методами. А уж что он делает, дело десятое. В частности, может изменять параметры сессии.
Класс это просто декларация/описание объекта.
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
casper - gg
22.04.2016 - 16:05
Цитата (Zzepish @ 22.04.2016 - 15:14) |
тут вопрос идеологии я ж сейчас учусь, фактичеки. Хочу научиться писать правильно. |
нету четких идеологий, по крайней мере мне не известны они. Есть логические понятные решения разных ситуаций, а есть запутанные, по логике, по логике вот само верно выглядит:
Цитата (S.Chushkin @ 22.04.2016 - 15:53) |
Правильно будет - объект "Сессия" со своими свойствами и методами. А уж что он делает, дело десятое. В частности, может изменять параметры сессии. |
у меня реализовано проще, - в нужных классах просто есть метод с названием созвучным с сессией, типа setSession или getSession и т.п. Неохота писать целый класс сессий и продумывать его возможные применения. Само просто, - добавить локально в нужный класс нужный метод.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.