[*: ActionStateMessageModel] улучшена реализация интерфейса ISerializable.

[*: ActionState] класс разбит на множество трейтов для более структурированности.

[*: ActionState] улучшена реализация интерфейса ISerializable.

[*: ActionState] класс внутреннего хранилища сообщений изменён на ObjectArray.

[*: ActionState] улучшена реализация метода Count.

[*: ActionState] улучшены реализации методов HasInfos, HasWarnings, HasErrors, IsSuccess, GetStringMessages и Clear.

 [*: ActionState] возвращаемое значение метода GetMessages заменено на ObjectArray.
This commit is contained in:
2025-05-05 17:39:34 +03:00
parent 18286ea99d
commit 2a03797bfe
9 changed files with 407 additions and 331 deletions

View File

@@ -2,11 +2,8 @@
namespace goodboyalex\php_components_pack\models;
use Exception;
use goodboyalex\php_components_pack\classes\ClassMapper;
use goodboyalex\php_components_pack\enums\MessageType;
use goodboyalex\php_components_pack\interfaces\ISerializable;
use UnitEnum;
/**
* Класс сообщения состояния.
@@ -53,18 +50,13 @@ final class ActionStateMessageModel implements ISerializable
public function UnSerialize (string $serialized): void
{
// Десериализую массив
$thisNew = unserialize($serialized);
$array = json_decode($serialized, true);
try {
// Получаю класс
$class = ClassMapper::MapToClassProperty(get_class($this), $thisNew);
}
catch (Exception) {
$class = new ActionStateMessageModel();
}
// Заполняю текущий класс
ClassMapper::MapClass($class, $this);
// Заполняю поля
$this->MessageType =
isset($array["MessageType"]) ? MessageType::FromName($array["MessageType"]) : MessageType::Info;
$this->IsCritical = isset($array["IsCritical"]) && $array["IsCritical"] == 1;
$this->Message = $array["Message"] ?? "";
}
/**
@@ -75,34 +67,12 @@ final class ActionStateMessageModel implements ISerializable
// Создаю массив результата
$result = [];
// Получаю свойства класса
$properties = get_object_vars($this);
// Заполняю массив
$result["MessageType"] = $this->MessageType->GetValue();
$result["IsCritical"] = $this->IsCritical ? 1 : 0;
$result["Message"] = $this->Message;
// Для каждого свойства класса
foreach ($properties as $key => $value) {
// - если значение является перечислением
if ($value instanceof UnitEnum) {
// -- получаю перечисление
$result[$key] = $value->name;
// -- следующий элемент
continue;
}
// - если значение является NULL
if ($value == null) {
// -- присваиваю NULL
$result[$key] = "null";
// -- следующий элемент
continue;
}
// - присваиваю значение
$result[$key] = $value;
}
// Сериализую массив и вывожу его
return serialize($result);
// Сериализую
return json_encode($result);
}
}