20250730
This commit is contained in:
parent
8436569ce5
commit
45fb57981d
@ -2,6 +2,4 @@
|
|||||||
|
|
||||||
[RU] Набор компонентов для сайта на PHP для работы с базами данных
|
[RU] Набор компонентов для сайта на PHP для работы с базами данных
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[EN] A set of components for PHP website for work with database
|
[EN] A set of components for PHP website for work with database
|
45
sources/attributes/ConvertToDB.php
Normal file
45
sources/attributes/ConvertToDB.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
use Closure;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указания методов конвертации из/в тип для заполнения таблицы базы данных.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class ConvertToDB
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var Closure|null Метод конвертации из типа для заполнения таблицы базы данных.
|
||||||
|
*/
|
||||||
|
public ?Closure $ConvertToDB;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Closure|null Метод конвертации в тип для заполнения таблицы базы данных.
|
||||||
|
*/
|
||||||
|
public ?Closure $ConvertFromDB;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param callable|null $fromType Метод конвертации из типа для заполнения таблицы базы данных.
|
||||||
|
* @param callable|null $toType Метод конвертации в тип для заполнения таблицы базы данных.
|
||||||
|
*/
|
||||||
|
public function __construct (?callable $fromType = null, ?callable $toType = null)
|
||||||
|
{
|
||||||
|
$this->ConvertToDB = $fromType;
|
||||||
|
$this->ConvertFromDB = $toType;
|
||||||
|
}
|
||||||
|
}
|
47
sources/attributes/IgnoredInDB.php
Normal file
47
sources/attributes/IgnoredInDB.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
use goodboyalex\php_components_pack\classes\ObjectArray;
|
||||||
|
use goodboyalex\php_db_components_pack\enums\DBOperation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указывающий, что свойство должно игнорироваться при операции с БД.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class IgnoredInDB
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ObjectArray Игнорируемые операции.
|
||||||
|
*/
|
||||||
|
public ObjectArray $IgnoredOperations;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Конструктор.
|
||||||
|
*
|
||||||
|
* @param DBOperation ...$ignoredOperations Список операций, которые игнорируем.
|
||||||
|
*/
|
||||||
|
public function __construct (DBOperation ...$ignoredOperations)
|
||||||
|
{
|
||||||
|
// Если не указаны операции
|
||||||
|
if (count($ignoredOperations) === 0)
|
||||||
|
// - то по умолчанию игнорируем все операции
|
||||||
|
$ignoredOperations = [
|
||||||
|
DBOperation::Insert, DBOperation::Get, DBOperation::Update, DBOperation::Delete, DBOperation::Count
|
||||||
|
];
|
||||||
|
|
||||||
|
// Инициализируем массив
|
||||||
|
$this->IgnoredOperations = new ObjectArray($ignoredOperations);
|
||||||
|
}
|
||||||
|
}
|
29
sources/attributes/PrimaryKey.php
Normal file
29
sources/attributes/PrimaryKey.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Отключаю несущественные инспекции (из-за Attribute)
|
||||||
|
*
|
||||||
|
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\attributes;
|
||||||
|
|
||||||
|
use Attribute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Атрибут указания, что параметр является первичным ключом таблицы.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||||
|
final readonly class PrimaryKey
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Конструктор
|
||||||
|
*/
|
||||||
|
public function __construct ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -1,45 +1,45 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace goodboyalex\php_db_components_pack\enums;
|
namespace goodboyalex\php_db_components_pack\enums;
|
||||||
|
|
||||||
use goodboyalex\php_components_pack\traits\EnumExtensionsTrait;
|
use goodboyalex\php_components_pack\traits\EnumExtensionsTrait;
|
||||||
|
|
||||||
/**
|
|
||||||
*Перечисление PDO-драйверов.
|
|
||||||
*
|
|
||||||
* @author Александр Бабаев
|
|
||||||
* @package php_db_components_pack
|
|
||||||
* @version 1.0
|
|
||||||
* @since 1.0
|
|
||||||
* @see \PDO
|
|
||||||
*/
|
|
||||||
enum DBDriver: int
|
|
||||||
{
|
|
||||||
// Подключаем trait для работы с перечислениями
|
|
||||||
use EnumExtensionsTrait;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MySQL
|
*Перечисление PDO-драйверов.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
* @see \PDO
|
||||||
*/
|
*/
|
||||||
case MySQL = 0;
|
enum DBDriver: int
|
||||||
|
{
|
||||||
/**
|
// Подключаем trait для работы с перечислениями
|
||||||
* Microsoft SQL
|
use EnumExtensionsTrait;
|
||||||
*/
|
|
||||||
case MSSQL = 1;
|
/**
|
||||||
|
* MySQL
|
||||||
/**
|
*/
|
||||||
* PostgreSQL
|
case MySQL = 0;
|
||||||
*/
|
|
||||||
case PostgreSQL = 2;
|
/**
|
||||||
|
* Microsoft SQL
|
||||||
/**
|
*/
|
||||||
* OracleDB
|
case MSSQL = 1;
|
||||||
*/
|
|
||||||
case OracleDB = 3;
|
/**
|
||||||
|
* PostgreSQL
|
||||||
/**
|
*/
|
||||||
* SQLite
|
case PostgreSQL = 2;
|
||||||
*/
|
|
||||||
case SQLite = 4;
|
/**
|
||||||
}
|
* OracleDB
|
||||||
|
*/
|
||||||
|
case OracleDB = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SQLite
|
||||||
|
*/
|
||||||
|
case SQLite = 4;
|
||||||
|
}
|
45
sources/enums/DBOperation.php
Normal file
45
sources/enums/DBOperation.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace goodboyalex\php_db_components_pack\enums;
|
||||||
|
|
||||||
|
use goodboyalex\php_components_pack\traits\EnumExtensionsTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Перечисление операций в БД.
|
||||||
|
*
|
||||||
|
* @author Александр Бабаев
|
||||||
|
* @package php_db_components_pack
|
||||||
|
* @version 1.0
|
||||||
|
* @since 1.0
|
||||||
|
* @see \PDO
|
||||||
|
*/
|
||||||
|
enum DBOperation: int
|
||||||
|
{
|
||||||
|
// Подключаем trait для работы с перечислениями
|
||||||
|
use EnumExtensionsTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Операция вставки.
|
||||||
|
*/
|
||||||
|
case Insert = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Операция получения.
|
||||||
|
*/
|
||||||
|
case Get = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Операция обновления.
|
||||||
|
*/
|
||||||
|
case Update = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Операция удаления.
|
||||||
|
*/
|
||||||
|
case Delete = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Операция подсчета количества.
|
||||||
|
*/
|
||||||
|
case Count = 4;
|
||||||
|
}
|
@ -1,120 +1,120 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace goodboyalex\php_db_components_pack\models;
|
namespace goodboyalex\php_db_components_pack\models;
|
||||||
|
|
||||||
use goodboyalex\php_components_pack\classes\Encryptor;
|
use goodboyalex\php_components_pack\classes\Encryptor;
|
||||||
use goodboyalex\php_components_pack\interfaces\ISerializable;
|
use goodboyalex\php_components_pack\interfaces\ISerializable;
|
||||||
use goodboyalex\php_db_components_pack\enums\DBDriver;
|
use goodboyalex\php_db_components_pack\enums\DBDriver;
|
||||||
|
|
||||||
/**
|
|
||||||
* Модель параметров базы данных.
|
|
||||||
*
|
|
||||||
* @author Александр Бабаев
|
|
||||||
* @package php_components_pack
|
|
||||||
* @version 1.0
|
|
||||||
* @since 1.0
|
|
||||||
*/
|
|
||||||
final class DBConfig implements ISerializable
|
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* @var string $Host Хост базы данных.
|
* Модель параметров базы данных.
|
||||||
*/
|
|
||||||
public string $Host;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var int $Port Порт базы данных.
|
|
||||||
* @between 0...65535
|
|
||||||
*/
|
|
||||||
public int $Port;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $Name Имя базы данных.
|
|
||||||
*/
|
|
||||||
public string $Name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $UserName Имя пользователя базы данных.
|
|
||||||
*/
|
|
||||||
public string $UserName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $Password Пароль пользователя базы данных.
|
|
||||||
*/
|
|
||||||
public string $Password;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var DBDriver $Driver Тип драйвера базы данных.
|
|
||||||
*/
|
|
||||||
public DBDriver $Driver;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string $Chipper Пароль шифрования.
|
|
||||||
*/
|
|
||||||
private string $Chipper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Конструктор.
|
|
||||||
*
|
*
|
||||||
* @param DBDriver $driver Тип драйвера базы данных.
|
* @author Александр Бабаев
|
||||||
* @param string $host Хост базы данных.
|
* @package php_components_pack
|
||||||
* @param int $port Порт базы данных.
|
* @version 1.0
|
||||||
* @param string $name Имя базы данных.
|
* @since 1.0
|
||||||
* @param string $userName Имя пользователя базы данных.
|
|
||||||
* @param string $password Пароль пользователя базы данных.
|
|
||||||
* @param string $chipper Пароль шифрования.
|
|
||||||
*/
|
*/
|
||||||
public function __construct (DBDriver $driver = DBDriver::MySQL, string $host = "", int $port = 0,
|
final class DBConfig implements ISerializable
|
||||||
string $name = "", string $userName = "", string $password = "", string $chipper = "")
|
|
||||||
{
|
{
|
||||||
$this->Driver = $driver;
|
/**
|
||||||
$this->Host = $host;
|
* @var string $Host Хост базы данных.
|
||||||
$this->Port = $port;
|
*/
|
||||||
$this->Name = $name;
|
public string $Host;
|
||||||
$this->UserName = $userName;
|
|
||||||
$this->Password = $password;
|
/**
|
||||||
$this->Chipper = $chipper;
|
* @var int $Port Порт базы данных.
|
||||||
}
|
* @between 0...65535
|
||||||
|
*/
|
||||||
/**
|
public int $Port;
|
||||||
* @inheritDoc
|
|
||||||
*/
|
/**
|
||||||
public function UnSerialize (string $serialized): void
|
* @var string $Name Имя базы данных.
|
||||||
{
|
*/
|
||||||
// Десериализую массив
|
public string $Name;
|
||||||
$array = json_decode($serialized, true);
|
|
||||||
|
/**
|
||||||
// Заполняю поля
|
* @var string $UserName Имя пользователя базы данных.
|
||||||
if (isset($array["host"]))
|
*/
|
||||||
$this->Host = $array["host"];
|
public string $UserName;
|
||||||
if (isset($array["port"]))
|
|
||||||
$this->Port = $array["port"];
|
/**
|
||||||
if (isset($array["name"]))
|
* @var string $Password Пароль пользователя базы данных.
|
||||||
$this->Name = $array["name"];
|
*/
|
||||||
if (isset($array["user"]))
|
public string $Password;
|
||||||
$this->UserName = $array["user"];
|
|
||||||
if (isset($array["password"]))
|
/**
|
||||||
$this->Password = Encryptor::Decrypt($array["password"], $this->Chipper);
|
* @var DBDriver $Driver Тип драйвера базы данных.
|
||||||
if (isset($array["driver"]))
|
*/
|
||||||
$this->Driver = DBDriver::FromInt($array["driver"]);
|
public DBDriver $Driver;
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* @var string $Chipper Пароль шифрования.
|
||||||
* @inheritDoc
|
*/
|
||||||
*/
|
private string $Chipper;
|
||||||
public function Serialize (): string
|
|
||||||
{
|
/**
|
||||||
// Создаю массив результата
|
* Конструктор.
|
||||||
$result = [];
|
*
|
||||||
|
* @param DBDriver $driver Тип драйвера базы данных.
|
||||||
// Заполняю массив
|
* @param string $host Хост базы данных.
|
||||||
$result["host"] = $this->Host;
|
* @param int $port Порт базы данных.
|
||||||
$result["port"] = $this->Port;
|
* @param string $name Имя базы данных.
|
||||||
$result["name"] = $this->Name;
|
* @param string $userName Имя пользователя базы данных.
|
||||||
$result["user"] = $this->UserName;
|
* @param string $password Пароль пользователя базы данных.
|
||||||
$result["password"] = Encryptor::Encrypt($this->Password, $this->Chipper);
|
* @param string $chipper Пароль шифрования.
|
||||||
$result["driver"] = $this->Driver->ToInt();
|
*/
|
||||||
|
public function __construct (DBDriver $driver = DBDriver::MySQL, string $host = "", int $port = 0,
|
||||||
// Сериализую
|
string $name = "", string $userName = "", string $password = "", string $chipper = "")
|
||||||
return json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
{
|
||||||
}
|
$this->Driver = $driver;
|
||||||
}
|
$this->Host = $host;
|
||||||
|
$this->Port = $port;
|
||||||
|
$this->Name = $name;
|
||||||
|
$this->UserName = $userName;
|
||||||
|
$this->Password = $password;
|
||||||
|
$this->Chipper = $chipper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function UnSerialize (string $serialized): void
|
||||||
|
{
|
||||||
|
// Десериализую массив
|
||||||
|
$array = json_decode($serialized, true);
|
||||||
|
|
||||||
|
// Заполняю поля
|
||||||
|
if (isset($array["host"]))
|
||||||
|
$this->Host = $array["host"];
|
||||||
|
if (isset($array["port"]))
|
||||||
|
$this->Port = $array["port"];
|
||||||
|
if (isset($array["name"]))
|
||||||
|
$this->Name = $array["name"];
|
||||||
|
if (isset($array["user"]))
|
||||||
|
$this->UserName = $array["user"];
|
||||||
|
if (isset($array["password"]))
|
||||||
|
$this->Password = Encryptor::Decrypt($array["password"], $this->Chipper);
|
||||||
|
if (isset($array["driver"]))
|
||||||
|
$this->Driver = DBDriver::FromInt($array["driver"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function Serialize (): string
|
||||||
|
{
|
||||||
|
// Создаю массив результата
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
// Заполняю массив
|
||||||
|
$result["host"] = $this->Host;
|
||||||
|
$result["port"] = $this->Port;
|
||||||
|
$result["name"] = $this->Name;
|
||||||
|
$result["user"] = $this->UserName;
|
||||||
|
$result["password"] = Encryptor::Encrypt($this->Password, $this->Chipper);
|
||||||
|
$result["driver"] = $this->Driver->ToInt();
|
||||||
|
|
||||||
|
// Сериализую
|
||||||
|
return json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user