Файл UsersRepository.php в Cotonti
Основное назначение файла UsersRepository.php в системной папке Cotonti CMF заключается в предоставлении функционала для работы с данными пользователей, хранящимися в базе данных. Этот файл содержит репозиторий, который служит интерфейсом между приложением и базой данных для выполнения операций с пользователями, таких как получение информации о пользователе по его ID. Репозиторий использует кэширование для ускорения работы и предотвращения излишних запросов к базе данных.
Суть содержания кода:
- Класс
UsersRepositoryявляется репозиторием для работы с данными пользователей, наследуя базовый классBaseRepository, что предполагает наличие общих методов для работы с таблицами базы данных. - В классе используется кэширование на основе статического свойства
cacheByIdдля хранения данных о пользователях, чтобы повторно не запрашивать информацию из базы данных. - Метод
getByIdпозволяет получить информацию о пользователе по его ID, с возможностью использования кэширования для повышения производительности. - Метод
castAttributesиспользуется для приведения данных из базы данных к нужным типам данных (например, преобразование временных меток в целые числа).
Список классов:
UsersRepository— основной класс репозитория пользователей.
Список методов и функций:
__construct()— Конструктор, который задает имя таблицы для работы с пользователями.getById(?int $id, bool $useCache = true): ?array— Получает данные о пользователе по его ID. Использует кэш, если это разрешено.castAttributes(array $item): array— Приводит атрибуты данных пользователя к нужным типам (например, целые числа).
Характеристика стиля PHP:
- Строгая типизация: В файле используется строгая типизация с директивой
declare(strict_types=1), что означает, что типы данных аргументов и возвращаемых значений строго проверяются. - Использование пространства имен: Применяется пространство имен
cot\users, что помогает избежать конфликтов имен классов в более крупных приложениях. - Использование PHP-типов: Для переменных и возвращаемых значений используются типы данных, такие как
?int(для допуска значенияnull),arrayиbool. - Реализация кэширования: В коде реализовано кэширование с использованием статического свойства
cacheById, что помогает избежать избыточных запросов к базе данных. - Наследование от базового класса: Класс
UsersRepositoryнаследует отBaseRepository, что позволяет использовать общую логику для работы с базой данных, упрощая повторное использование кода.
Это типичный пример хорошо организованного и масштабируемого репозитория для работы с данными в фреймворке Cotonti, который также подчеркивает использование современных практик разработки с учетом производительности.
файл UsersRepository.php в Cotonti CMF, который находится по адресу: system/users/UsersRepository.php
<?php
declare(strict_types=1); // Объявляется строгая типизация
namespace cot\users; // Указываем, что класс принадлежит пространству имен cot\users
use Cot; // Подключаем класс Cot
use cot\repositories\BaseRepository; // Подключаем базовый репозиторий для работы с данными
defined('COT_CODE') or die('Wrong URL'); // Проверка, что файл был вызван корректно, иначе выводим ошибку
/**
* Users repository
* @package Cotonti
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
*/
class UsersRepository extends BaseRepository // Объявляем класс UsersRepository, который наследует BaseRepository
{
private static $cacheById = []; // Статическое свойство для кэширования пользователей по их ID
public function __construct() // Конструктор класса
{
$this->tableName = Cot::$db->users; // Устанавливаем имя таблицы из глобальной базы данных
}
/**
* Fetches user entry from DB
* @param ?int $id User ID
* @param bool $useCache Use one time session cache
* @return ?array
*/
public function getById(?int $id, bool $useCache = true): ?array // Метод для получения пользователя по ID
{
if ($id === null && Cot::$usr['id'] > 0) { // Если ID не передан и текущий пользователь авторизован
$id = Cot::$usr['id']; // Используем ID текущего пользователя
}
if (empty($id) || $id < 1) { // Если ID пустое или меньше 1
return null; // Возвращаем null
}
if ($useCache && isset(self::$cacheById[$id])) { // Если используем кэш и есть данные для данного ID
return self::$cacheById[$id] !== false ? self::$cacheById[$id] : null; // Возвращаем данные из кэша, если они не ложные
}
if ($id === Cot::$usr['id'] && $useCache) { // Если ID текущего пользователя и мы используем кэш
$result = Cot::$usr['profile']; // Используем профиль текущего пользователя
} else {
$condition = 'user_id = :userId'; // Условие для выборки данных пользователя
$params = ['userId' => $id]; // Параметры запроса
$results = $this->getByCondition($condition, $params); // Получаем результаты из базы данных
$result = !empty($results) ? $results[0] : null; // Если результаты есть, возвращаем первый, иначе null
}
self::$cacheById[$id] = !empty($result) ? $result : false; // Кэшируем результат для дальнейшего использования
return $result; // Возвращаем результат
}
protected function castAttributes(array $item): array // Метод для приведения атрибутов к нужным типам
{
$item['user_id'] = (int) $item['user_id']; // Приводим ID пользователя к целому числу
$item['user_maingrp'] = (int) $item['user_maingrp']; // Приводим ID главной группы пользователя к целому числу
$item['user_banexpire'] = (int) $item['user_banexpire']; // Приводим время окончания бана к целому числу
$item['user_regdate'] = (int) $item['user_regdate']; // Приводим дату регистрации пользователя к целому числу
$item['user_lastlog'] = (int) $item['user_lastlog']; // Приводим время последнего логина к целому числу
$item['user_lastvisit'] = (int) $item['user_lastvisit']; // Приводим время последнего визита к целому числу
$item['user_logcount'] = (int) $item['user_logcount']; // Приводим количество логинов к целому числу
$item['user_sidtime'] = (int) $item['user_sidtime']; // Приводим время сессии пользователя к целому числу
return $item; // Возвращаем измененный массив
}
}
Объяснение кода:
- Конструктор устанавливает имя таблицы для репозитория пользователей.
- Метод
getByIdполучает информацию о пользователе по ID. Он использует кэш, если это разрешено, и, если данных нет, запрашивает их из базы данных. Также обрабатывается ситуация с текущим авторизованным пользователем. - Метод
castAttributesиспользуется для приведения данных пользователя к правильным типам данных (например, к целым числам для определённых полей).
Класс использует кэширование, чтобы ускорить повторные запросы данных для пользователей, избегая лишних запросов к базе данных.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-27 23:30
- Last update: 2025-01-27 23:30