Файл ExtensionsRepository.php в Cotonti
Основное назначение файла ExtensionsRepository.php в движке Cotonti CMF заключается в реализации класса ExtensionsRepository, который предоставляет методы для взаимодействия с данными расширений, хранящимися в базе данных. Этот класс расширяет функциональность базового репозитория BaseRepository и служит для работы с расширениями типа модуль или плагин.
Суть содержания кода:
-
Класс
ExtensionsRepositoryнаследует от BaseRepository, что позволяет использовать основные методы для работы с базой данных, такие как выполнение запросов, поиск, обновление данных и т. п. -
Конструктор класса:
- В конструкторе происходит инициализация свойства
tableNameс именем таблицы базы данныхCot::$db->core, что указывает на таблицу, с которой будут работать методы данного класса.
- В конструкторе происходит инициализация свойства
-
Метод
getByCode():- Этот метод выполняет запрос в таблицу, используя код расширения, чтобы получить данные о конкретном расширении.
- Он принимает три параметра:
extensionCode— код расширения.extensionType— тип расширения (может бытьnull, что означает, что тип будет определяться автоматически).active— состояние активности расширения (также может бытьnull, в этом случае состояние активности не будет учитываться).
- Метод формирует условие для SQL-запроса в зависимости от значений параметров:
- Если задан
extensionType, то добавляется условие для фильтрации по типу (модуль или плагин). - Если задан
active, то добавляется условие для фильтрации по состоянию активности.
- Если задан
- Если результат запроса не пустой, то возвращается первый элемент из результатов, который представляет собой ассоциативный массив с данными расширения (например, код, состояние, блокировка, тип плагина и т. д.). Если расширение не найдено, метод возвращает
null.
-
Метод
castAttributes():- Этот метод используется для приведения типов данных, полученных из базы данных, к нужным типам:
ct_id,ct_state— к целочисленному типу.ct_lock,ct_plug— к типу boolean.
- Приведение типов гарантирует, что данные, полученные из базы, будут соответствовать ожидаемым типам, предотвращая возможные ошибки при работе с ними.
- Этот метод используется для приведения типов данных, полученных из базы данных, к нужным типам:
Условия, которые выполняет код:
-
Поиск по коду расширения:
- Если задан
extensionCode, то код выполняет запрос для получения данных об этом расширении из таблицы базы данных.
- Если задан
-
Фильтрация по типу расширения:
- Если задан параметр
extensionType, то добавляется условие для фильтрации по типу расширения (модуль или плагин). Тип модуля определяется значением0, а плагина —1.
- Если задан параметр
-
Фильтрация по состоянию активности:
- Если задан параметр
active, то добавляется условие для фильтрации по состоянию активности расширения. Если активное — значение1, если неактивное —0.
- Если задан параметр
-
Преобразование типов данных:
- После получения данных из базы данных, атрибуты массива преобразуются в нужные типы (целые числа для идентификаторов и состояния, булевы значения для блокировки и типа плагина).
Основное место в системе:
- Этот класс является частью Cotonti CMF и играет роль взаимодействия с таблицей
core, где хранятся данные о расширениях. - Он используется для того, чтобы получить информацию о расширении по коду, а также для преобразования данных перед их использованием в других частях системы.
- Его можно использовать, например, в административной панели, для отображения информации о расширениях, их активации или деактивации, а также для других операций, связанных с расширениями.
Таким образом, ExtensionsRepository предоставляет функциональность для работы с расширениями в рамках системы Cotonti CMF, обеспечивая гибкость при работе с их состоянием, типом и данными.
находится по адресу: /system/extensions/ExtensionsRepository.php
<?php
declare(strict_types=1); // Включение строгой типизации, которая требует, чтобы типы данных строго соблюдались.
namespace cot\extensions; // Указание пространства имён, в котором находится этот класс.
use Cot; // Подключение глобального объекта Cot.
use cot\repositories\BaseRepository; // Подключение базового репозитория для работы с базой данных.
class ExtensionsRepository extends BaseRepository // Класс расширяет функционал базового репозитория для работы с расширениями.
{
public function __construct() // Конструктор класса.
{
$this->tableName = Cot::$db->core; // Инициализация свойства tableName с именем таблицы из базы данных Cot.
}
/**
* @return ?array{ // Ожидаемый результат - ассоциативный массив или null.
* ct_id: int, // Идентификатор записи.
* ct_code: string, // Код расширения.
* ct_title: string, // Заголовок расширения.
* ct_version: string, // Версия расширения.
* ct_state: int, // Состояние расширения.
* ct_lock: bool, // Заблокировано ли расширение.
* ct_plug: bool // Является ли расширением плагином.
* }
*/
public function getByCode(string $extensionCode, ?string $extensionType = null, ?bool $active = null): ?array // Метод для получения информации об расширении по коду.
{
$condition = ['ct_code = :code']; // Начальная часть условия запроса - поиск по коду расширения.
$params = ['code' => $extensionCode]; // Массив параметров для подстановки в запрос.
if ($extensionType !== null) { // Если задан тип расширения (модуль или плагин).
$condition[] = 'ct_plug = ' . ($extensionType === ExtensionsDictionary::TYPE_MODULE ? 0 : 1); // Добавление условия для поиска по типу (0 - модуль, 1 - плагин).
}
if ($active !== null) { // Если задано состояние активности расширения.
$condition[] = 'ct_state = ' . ($active ? 1 : 0); // Добавление условия для поиска по состоянию активности (1 - активно, 0 - не активно).
}
$result = $this->getByCondition($condition, $params); // Вызов метода из родительского класса для получения данных по условиям.
if (empty($result)) { // Если результат пустой, то возвращаем null.
return null;
}
return array_shift($result); // Возвращаем первый элемент из результата, который представляет собой информацию об расширении.
}
protected function castAttributes(array $item): array // Метод для приведения типов данных в массиве.
{
$item['ct_id'] = (int) $item['ct_id']; // Приведение ct_id к целочисленному типу.
$item['ct_state'] = (int) $item['ct_state']; // Приведение ct_state к целочисленному типу.
$item['ct_lock'] = (bool) $item['ct_lock']; // Приведение ct_lock к типу boolean.
$item['ct_plug'] = (bool) $item['ct_plug']; // Приведение ct_plug к типу boolean.
return $item; // Возвращение массива с приведёнными значениями.
}
}
Основные моменты:
- ExtensionsRepository — класс для работы с данными расширений в базе данных.
- В классе используется метод getByCode(), который позволяет получить данные об определённом расширении по его коду и типу (модуль или плагин).
- castAttributes() — метод для приведения типов данных элементов массива, полученных из базы данных.
- getByCondition() — вызывается из родительского класса BaseRepository, и позволяет строить запросы на основе переданных условий.
Данный код работает с таблицей базы данных core и отвечает за запросы к данным расширений, таким как состояние, код, заголовок, версия и другие характеристики.
Comments (0)
Content author
Offline
Administrator
Last logged: 2026-07-05 18:32
- Page published: 2025-01-28 01:07
- Last update: 2025-01-28 01:07