Что лучше — использовать сессию или делать запрос к базе данных?
Добрый день, хочу немного проконсультироваться по такому вопросу. В Yii2 у меня есть раздел страницы на сайте, доступный пользователям, которые не только зарегистрировались, но также и подтвердили свой email. Для тех, кто свой email не подтвердил, этот раздел на странице не доступен, хотя сама страница доступна. Сама страница рендерится в контроллере, который передает во view этой страницы параметр user_status (0 - незарегистрированный, 1 - зарегистрированный, 2 - подтвердил email). Соответственно, в зависимости от значения user_status, view либо показывает этот скрытый раздел, либо закрывает его. Вопрос, который меня беспокоит: при каждом вызове действия контроллер должен передавать во view user_status, соответственно контроллер делает запрос к базе данных и получает информацию о текущем пользователе. Yii->app->user-identity я здесь использовать не могу, потому что моя логика не является частью IdentityInterface, поэтому компонент user не содержит нужную мне информацию. Но разумно ли каждый раз обращаться к базе данных? Или правильнее будет поставить статус пользователя в сессию? Спасибо.
Или правильнее будет поставить статус пользователя в сессию?
Этот вариант - верный, т.к. не нужно дёргать постоянно базу.
PS: А вообще, нужно иметь репозиторий родительского класса в приложении и получать туда все нужные данные о пользователе из базы или сессии однократно за всё время работы скрипта (за одно клиентское обращение через URL)...
На будущее, для кэша на сессиях:
1. Сессия - это кеширование данных базы.
2. Запрос к базе - актуализация данных кэша.
Спасибо, а можно где-нибудь посмотреть информацию про то, что вы называете "репозиторий родительского класса" - как это организовать в Yii или какие-либо snippets? Мне эта идея понравилась
rrolegov, я не пишу на Yii я пишу на нативном PHP и сам строю архитектуру.
Могу лишь описать термин: это публичный объект родительского класса приложения, представляющий из себя "древовидную" структуру из значений и/или вложенных в него различных других объектов, содержащих какие-либо значения (или получающие эти значения на протяжении всего времени исполнения приложения).
Иван, конечно, не единственный: дали Вам 2 цвета из 2^32 цветов мозаики и говорят: сделай, чтобы выглядело красиво.
А кто-то подошёл и посмотрел, что там 2^32 и сам выбрал нужные цвета и сделал в разы красивее.
Доступно?!)))
Иван, 2-й вариант: приходите в супермаркет, а от Вас всё прячут и кричат: "Ничего нет кроме хлеба! Только хлеб! Вкусный хлеб! Все берут хлеб и Вы берите!"