From de10cbae31990786ee071ec54d615ac68602b13a Mon Sep 17 00:00:00 2001 From: User Date: Tue, 23 Apr 2024 05:41:46 +0300 Subject: [PATCH] 20240423#5 --- .../Controllers/AbstractPageController.php | 3 ++- application/src/Services/AbstractDTO.php | 23 ++++++++----------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/application/src/Controllers/AbstractPageController.php b/application/src/Controllers/AbstractPageController.php index 28c8de8..4859457 100644 --- a/application/src/Controllers/AbstractPageController.php +++ b/application/src/Controllers/AbstractPageController.php @@ -2,6 +2,7 @@ namespace Base\Controllers; +use Base\Domain\DomainException; use Base\Services\DTOException; use Base\Services\ServiceException; use Exception; @@ -28,7 +29,7 @@ abstract class AbstractPageController extends AbstractController { */ public function checkError(Throwable $e) : string { ($e instanceof Exception) ? $this->logException($e) : $this->logError($e); - if($e instanceof DTOException || $e instanceof ServiceException) return $e->getMessage(); + if($e instanceof DTOException || $e instanceof DomainException || $e instanceof ServiceException) return $e->getMessage(); return "Ошибка. Дата и время: ".date("d-m-Y H:i:s"); } } \ No newline at end of file diff --git a/application/src/Services/AbstractDTO.php b/application/src/Services/AbstractDTO.php index f317133..0ed7564 100644 --- a/application/src/Services/AbstractDTO.php +++ b/application/src/Services/AbstractDTO.php @@ -8,25 +8,20 @@ use ReflectionClass; abstract class AbstractDTO { /** - * @throws Exception + * @param array $data + * @return static */ static function fromArray(array $data) : static { $class = new ReflectionClass(static::class); $self = new static(); foreach ($class->getProperties() as $property) { - try { - $propertyNameSnakeCase = strtolower(preg_replace("'([A-Z])'", "_$1", $property->getName())); - // data[propertyName] ?? data[property_name] ?? null - $value = $data[$property->getName()] ?? $data[$propertyNameSnakeCase] ?? null; - // если есть внутренний метод (приоритетная обработка) - if($class->hasMethod('set'.ucfirst($property->getName()))) $self->{'set'.ucfirst($property->getName())}($value); - // прямое присовение по умолчанию - elseif(isset($value)) $self->{$property->getName()} = $value; - } - catch (\Error $error) { - $errorKey[$property->getName()] = $error->getMessage(); - } - if(!empty($errorKey)) throw new Exception(json_encode(["data"=>$data, "error"=>$errorKey])); + $propertyNameSnakeCase = strtolower(preg_replace("'([A-Z])'", "_$1", $property->getName())); + // data[propertyName] ?? data[property_name] ?? null + $value = $data[$property->getName()] ?? $data[$propertyNameSnakeCase] ?? null; + // если есть внутренний метод (приоритетная обработка) + if($class->hasMethod('set'.ucfirst($property->getName()))) $self->{'set'.ucfirst($property->getName())}($value); + // прямое присовение по умолчанию + elseif(isset($value)) $self->{$property->getName()} = $value; } return $self; }