Файл ExtensionsRepository.php в Cotonti

Основное назначение файла ExtensionsRepository.php в движке Cotonti CMF заключается в реализации класса ExtensionsRepository, который предоставляет методы для взаимодействия с данными расширений, хранящимися в базе данных. Этот класс расширяет функциональность базового репозитория BaseRepository и служит для работы с расширениями типа модуль или плагин.

Суть содержания кода:

  1. Класс ExtensionsRepository наследует от BaseRepository, что позволяет использовать основные методы для работы с базой данных, такие как выполнение запросов, поиск, обновление данных и т. п.

  2. Конструктор класса:

    • В конструкторе происходит инициализация свойства tableName с именем таблицы базы данных Cot::$db->core, что указывает на таблицу, с которой будут работать методы данного класса.
  3. Метод getByCode():

    • Этот метод выполняет запрос в таблицу, используя код расширения, чтобы получить данные о конкретном расширении.
    • Он принимает три параметра:
      • extensionCode — код расширения.
      • extensionType — тип расширения (может быть null, что означает, что тип будет определяться автоматически).
      • active — состояние активности расширения (также может быть null, в этом случае состояние активности не будет учитываться).
    • Метод формирует условие для SQL-запроса в зависимости от значений параметров:
      • Если задан extensionType, то добавляется условие для фильтрации по типу (модуль или плагин).
      • Если задан active, то добавляется условие для фильтрации по состоянию активности.
    • Если результат запроса не пустой, то возвращается первый элемент из результатов, который представляет собой ассоциативный массив с данными расширения (например, код, состояние, блокировка, тип плагина и т. д.). Если расширение не найдено, метод возвращает null.
  4. Метод castAttributes():

    • Этот метод используется для приведения типов данных, полученных из базы данных, к нужным типам:
      • ct_id, ct_state — к целочисленному типу.
      • ct_lock, ct_plug — к типу boolean.
    • Приведение типов гарантирует, что данные, полученные из базы, будут соответствовать ожидаемым типам, предотвращая возможные ошибки при работе с ними.

Условия, которые выполняет код:

  1. Поиск по коду расширения:

    • Если задан extensionCode, то код выполняет запрос для получения данных об этом расширении из таблицы базы данных.
  2. Фильтрация по типу расширения:

    • Если задан параметр extensionType, то добавляется условие для фильтрации по типу расширения (модуль или плагин). Тип модуля определяется значением 0, а плагина — 1.
  3. Фильтрация по состоянию активности:

    • Если задан параметр active, то добавляется условие для фильтрации по состоянию активности расширения. Если активное — значение 1, если неактивное — 0.
  4. Преобразование типов данных:

    • После получения данных из базы данных, атрибуты массива преобразуются в нужные типы (целые числа для идентификаторов и состояния, булевы значения для блокировки и типа плагина).

Основное место в системе:

  • Этот класс является частью 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; // Возвращение массива с приведёнными значениями.
    }
}

Основные моменты:

  1. ExtensionsRepository — класс для работы с данными расширений в базе данных.
  2. В классе используется метод getByCode(), который позволяет получить данные об определённом расширении по его коду и типу (модуль или плагин).
  3. castAttributes() — метод для приведения типов данных элементов массива, полученных из базы данных.
  4. getByCondition() — вызывается из родительского класса BaseRepository, и позволяет строить запросы на основе переданных условий.

Данный код работает с таблицей базы данных core и отвечает за запросы к данным расширений, таким как состояние, код, заголовок, версия и другие характеристики.

 

5 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 28.01.2025 01:07
  • Последнее обновление: 28.01.2025 01:07