20250713 1.1.1
This commit is contained in:
		| @@ -5,7 +5,7 @@ namespace goodboyalex\php_components_pack\traits\ActionState; | ||||
| use goodboyalex\php_components_pack\classes\ActionState; | ||||
| use goodboyalex\php_components_pack\classes\ObjectArray; | ||||
| use goodboyalex\php_components_pack\enums\MessageType; | ||||
| use goodboyalex\php_components_pack\models\ActionStateMessageModel; | ||||
| use goodboyalex\php_components_pack\models\ActionStateMessage; | ||||
|  | ||||
| /** | ||||
|  * Часть кода класса ActionState, отвечающая за методы добавления сообщений. | ||||
| @@ -30,7 +30,7 @@ trait ActionStateAddTrait | ||||
|         // Если нужно очистить список сообщений | ||||
|         if ($clearAllBefore) | ||||
|             // - то очищаю список сообщений | ||||
|             $this->Clear(fn (ActionStateMessageModel $message) => true); | ||||
|             $this->Clear(fn (ActionStateMessage $message) => true); | ||||
|  | ||||
|         // Добавляю сообщения из другого состояния | ||||
|         $this->AddRange($state->GetMessages(ActionState::GET_STRING_ALL())); | ||||
| @@ -61,17 +61,17 @@ trait ActionStateAddTrait | ||||
|      */ | ||||
|     public function AddCritical (string $message): void | ||||
|     { | ||||
|         $this->Add(new ActionStateMessageModel(MessageType::Error, true, $message)); | ||||
|         $this->Add(new ActionStateMessage(MessageType::Error, true, $message)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Добавление сообщения. | ||||
|      * | ||||
|      * @param ActionStateMessageModel $message Сообщение | ||||
|      * @param ActionStateMessage $message Сообщение | ||||
|      * | ||||
|      * @return void | ||||
|      */ | ||||
|     public function Add (ActionStateMessageModel $message): void | ||||
|     public function Add (ActionStateMessage $message): void | ||||
|     { | ||||
|         $this->Messages->Add($message); | ||||
|     } | ||||
| @@ -85,7 +85,7 @@ trait ActionStateAddTrait | ||||
|      */ | ||||
|     public function AddError (string $message): void | ||||
|     { | ||||
|         $this->Add(new ActionStateMessageModel(MessageType::Error, false, $message)); | ||||
|         $this->Add(new ActionStateMessage(MessageType::Error, false, $message)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -97,7 +97,7 @@ trait ActionStateAddTrait | ||||
|      */ | ||||
|     public function AddWarning (string $message): void | ||||
|     { | ||||
|         $this->Add(new ActionStateMessageModel(MessageType::Warning, false, $message)); | ||||
|         $this->Add(new ActionStateMessage(MessageType::Warning, false, $message)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -109,6 +109,6 @@ trait ActionStateAddTrait | ||||
|      */ | ||||
|     public function AddInfo (string $message): void | ||||
|     { | ||||
|         $this->Add(new ActionStateMessageModel(MessageType::Info, false, $message)); | ||||
|         $this->Add(new ActionStateMessage(MessageType::Info, false, $message)); | ||||
|     } | ||||
| } | ||||
| @@ -3,7 +3,7 @@ | ||||
| namespace goodboyalex\php_components_pack\traits\ActionState; | ||||
|  | ||||
| use goodboyalex\php_components_pack\enums\MessageType; | ||||
| use goodboyalex\php_components_pack\models\ActionStateMessageModel; | ||||
| use goodboyalex\php_components_pack\models\ActionStateMessage; | ||||
|  | ||||
| /** | ||||
|  * Часть кода класса ActionState, отвечающая за методы проверки на наличие сообщений. | ||||
| @@ -22,7 +22,7 @@ trait ActionStateHasTrait | ||||
|      */ | ||||
|     public function HasInfos (): bool | ||||
|     { | ||||
|         return $this->Messages->IsExist(fn (ActionStateMessageModel $message) | ||||
|         return $this->Messages->IsExist(fn (ActionStateMessage $message) | ||||
|             => $message->MessageType | ||||
|             == MessageType::Info); | ||||
|     } | ||||
| @@ -48,7 +48,7 @@ trait ActionStateHasTrait | ||||
|      */ | ||||
|     public function HasErrors (bool $onlyCritical = false): bool | ||||
|     { | ||||
|         return $this->Messages->IsExist(fn (ActionStateMessageModel $message): bool | ||||
|         return $this->Messages->IsExist(fn (ActionStateMessage $message): bool | ||||
|             => $onlyCritical | ||||
|             ? $message->MessageType == MessageType::Error && $message->IsCritical | ||||
|             : $message->MessageType == MessageType::Error); | ||||
| @@ -61,7 +61,7 @@ trait ActionStateHasTrait | ||||
|      */ | ||||
|     public function HasWarnings (): bool | ||||
|     { | ||||
|         return $this->Messages->IsExist(fn (ActionStateMessageModel $message) | ||||
|         return $this->Messages->IsExist(fn (ActionStateMessage $message) | ||||
|             => $message->MessageType | ||||
|             == MessageType::Warning); | ||||
|     } | ||||
|   | ||||
| @@ -4,7 +4,7 @@ namespace goodboyalex\php_components_pack\traits\ActionState; | ||||
|  | ||||
| use Closure; | ||||
| use goodboyalex\php_components_pack\enums\MessageType; | ||||
| use goodboyalex\php_components_pack\models\ActionStateMessageModel; | ||||
| use goodboyalex\php_components_pack\models\ActionStateMessage; | ||||
|  | ||||
| /** | ||||
|  * Часть кода класса ActionState, отвечающая за статичные методы и константы. | ||||
| @@ -23,7 +23,7 @@ trait ActionStateStaticTrait | ||||
|      */ | ||||
|     public static function GET_STRING_ERROR_ONLY (): Closure | ||||
|     { | ||||
|         return fn (ActionStateMessageModel $message) | ||||
|         return fn (ActionStateMessage $message) | ||||
|             => $message->MessageType === MessageType::Error; | ||||
|     } | ||||
|  | ||||
| @@ -34,7 +34,7 @@ trait ActionStateStaticTrait | ||||
|      */ | ||||
|     public static function GET_STRING_ERROR_AND_WARNING (): Closure | ||||
|     { | ||||
|         return fn (ActionStateMessageModel $message) | ||||
|         return fn (ActionStateMessage $message) | ||||
|             => $message->MessageType === MessageType::Error | ||||
|             || $message->MessageType === MessageType::Warning; | ||||
|     } | ||||
| @@ -46,6 +46,6 @@ trait ActionStateStaticTrait | ||||
|      */ | ||||
|     public static function GET_STRING_ALL (): Closure | ||||
|     { | ||||
|         return fn (ActionStateMessageModel $message) => true; | ||||
|         return fn (ActionStateMessage $message) => true; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										176
									
								
								sources/traits/ObjectArray/ObjectArraySerializeExTrait.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								sources/traits/ObjectArray/ObjectArraySerializeExTrait.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,176 @@ | ||||
| <?php | ||||
|  | ||||
| namespace goodboyalex\php_components_pack\traits\ObjectArray; | ||||
|  | ||||
| use goodboyalex\php_components_pack\classes\ObjectArray; | ||||
| use goodboyalex\php_components_pack\enums\ObjectArraySerializeMethod; | ||||
| use goodboyalex\php_components_pack\exceptions\TypeException; | ||||
| use goodboyalex\php_components_pack\extensions\TypeExtension; | ||||
| use goodboyalex\php_components_pack\models\ObjectArraySerializeOptions; | ||||
|  | ||||
| /** | ||||
|  * Часть кода класса ObjectArray, отвечающая за расширенный функции сериализации. | ||||
|  * | ||||
|  * @author Александр Бабаев | ||||
|  * @package php_components_pack | ||||
|  * @version 1.0 | ||||
|  * @since 1.1.1 | ||||
|  */ | ||||
| trait ObjectArraySerializeExTrait | ||||
| { | ||||
|     /** | ||||
|      * Десериализует массив объектов. | ||||
|      * | ||||
|      * @param string $serialized Сериализованный массив. | ||||
|      * @param ObjectArraySerializeOptions|null $options Настройки сериализации. По умолчанию используется настройка по | ||||
|      *     умолчанию. | ||||
|      * | ||||
|      * @return ObjectArray Массив объектов. | ||||
|      */ | ||||
|     public static function UnSerializeEx (string $serialized, ?ObjectArraySerializeOptions $options = null): ObjectArray | ||||
|     { | ||||
|         // По умолчанию используем настройки по умолчанию | ||||
|         $options ??= new ObjectArraySerializeOptions(); | ||||
|  | ||||
|         // Десериализуем массив объектов | ||||
|         return match ($options->SerializeMethod) { | ||||
|             // - стандартный метод UnSerialize | ||||
|             ObjectArraySerializeMethod::Serialize => self::UnSerializeBySerialize($serialized), | ||||
|             // - метод JsonEncode | ||||
|             ObjectArraySerializeMethod::JsonEncode => self::UnSerializeByJsonEncode($serialized), | ||||
|             // - метод JsonEncodeWithToArray | ||||
|             ObjectArraySerializeMethod::JsonEncodeWithToArray => self::UnSerializeByJsonEncodeWithToArray($serialized, | ||||
|                 $options->OnClassFrom) | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Десериализует массив объектов с помощью стандартного метода UnSerialize. | ||||
|      * | ||||
|      * @param string $serialized Сериализованный массив. | ||||
|      * | ||||
|      * @return ObjectArray Массив объектов. | ||||
|      */ | ||||
|     private static function UnSerializeBySerialize (string $serialized): ObjectArray | ||||
|     { | ||||
|         // Создаем новый объект | ||||
|         $result = new ObjectArray(); | ||||
|  | ||||
|         // Десериализуем массив объектов с помощью стандартного метода | ||||
|         $result->UnSerialize($serialized); | ||||
|  | ||||
|         // Возвращаем результат | ||||
|         return $result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Десериализует массив объектов с помощью метода JsonEncode. | ||||
|      * | ||||
|      * @param string $serialized Сериализованный массив. | ||||
|      * | ||||
|      * @return ObjectArray Массив объектов. | ||||
|      */ | ||||
|     private static function UnSerializeByJsonEncode (string $serialized): ObjectArray | ||||
|     { | ||||
|         // Десериализуем массив | ||||
|         $container = json_decode($serialized, false, flags: JSON_UNESCAPED_UNICODE); | ||||
|  | ||||
|         // Создаем новый объект | ||||
|         return new ObjectArray($container); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Десериализует массив объектов с помощью метода JsonEncodeWithToArray. | ||||
|      * | ||||
|      * @param string $serialized Сериализованный массив. | ||||
|      * @param callable|null $onClass Функция обратного вызова для десериализации объекта методом JsonEncodeWithToArray. | ||||
|      *     Она передается в качестве параметра в функцию FromArray и служит для правильного преобразования массива в | ||||
|      *     тип. | ||||
|      * | ||||
|      * @return ObjectArray Массив объектов. | ||||
|      */ | ||||
|     private static function UnSerializeByJsonEncodeWithToArray (string $serialized, ?callable $onClass): ObjectArray | ||||
|     { | ||||
|         // Десериализуем массив | ||||
|         $container = json_decode($serialized, true, flags: JSON_UNESCAPED_UNICODE); | ||||
|  | ||||
|         // Создаем новый объект, в который будем помещать объекты | ||||
|         $result = new ObjectArray(); | ||||
|  | ||||
|         // Переберем все объекты в контейнере | ||||
|         foreach ($container as $item) | ||||
|             try { | ||||
|                 // - пробуем преобразовать массив в объект, если это возможно | ||||
|                 $result[] = TypeExtension::FromArray($item, $onClass); | ||||
|             } | ||||
|             catch (TypeException) { | ||||
|                 // - если не получилось, то просто добавляем объект в массив | ||||
|                 $result[] = $item; | ||||
|             } | ||||
|  | ||||
|         // Возвращаем результат | ||||
|         return $result; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Сериализует массив объектов. | ||||
|      * | ||||
|      * @param ObjectArraySerializeOptions|null $options Настройки сериализации. По умолчанию используется настройка по | ||||
|      *     умолчанию. | ||||
|      * | ||||
|      * @return string Сериализованный массив. | ||||
|      */ | ||||
|     public function SerializeEx (?ObjectArraySerializeOptions $options = null): string | ||||
|     { | ||||
|         // По умолчанию используем настройки по умолчанию | ||||
|         $options ??= new ObjectArraySerializeOptions(); | ||||
|  | ||||
|         // Сериализуем массив | ||||
|         return match ($options->SerializeMethod) { | ||||
|             // - стандартный метод Serialize | ||||
|             ObjectArraySerializeMethod::Serialize => $this->Serialize(), | ||||
|             // - метод JsonEncode | ||||
|             ObjectArraySerializeMethod::JsonEncode => $this->SerializeByJsonEncode(), | ||||
|             // - метод JsonEncodeWithToArray | ||||
|             ObjectArraySerializeMethod::JsonEncodeWithToArray => $this->SerializeByJsonEncodeWithToArray($options->OnClassTo) | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Сериализует массив методом JsonEncode. | ||||
|      * | ||||
|      * @return string Сериализованный массив. | ||||
|      */ | ||||
|     private function SerializeByJsonEncode (): string | ||||
|     { | ||||
|         return json_encode($this->Container, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Сериализует массив методом JsonEncodeWithToArray. | ||||
|      * | ||||
|      * @param callable|null $onClass Функция обратного вызова для сериализации объекта методом JsonEncodeWithToArray. | ||||
|      *     Она передается в качестве параметра в функцию ToArray и служит для правильного преобразования типа в массив. | ||||
|      * | ||||
|      * @return string Сериализованный массив. | ||||
|      */ | ||||
|     private function SerializeByJsonEncodeWithToArray (?callable $onClass): string | ||||
|     { | ||||
|         // Создадим массив, в который будем помещать объекты | ||||
|         $container = []; | ||||
|  | ||||
|         // Переберем все объекты в контейнере | ||||
|         foreach ($this->Container as $item) | ||||
|             try { | ||||
|                 // - пробуем преобразовать объект в массив, если это возможно | ||||
|                 $container[] = TypeExtension::ToArray($item, $onClass); | ||||
|             } | ||||
|             catch (TypeException) { | ||||
|                 // - если не получилось, то просто добавляем объект в массив | ||||
|                 $container[] = $item; | ||||
|             } | ||||
|  | ||||
|         // Возвращаем сериализованный массив | ||||
|         return json_encode($container, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user