mirror of
https://gitlab.com/omair-personal/izyim.git
synced 2026-08-19 04:14:05 +00:00
89 lines
2.2 KiB
PHP
89 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Orders\Processors;
|
|
|
|
|
|
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
|
|
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Str;
|
|
|
|
class StepProcessMapper
|
|
{
|
|
|
|
/**
|
|
* @param $class
|
|
* @param array $valuesArray
|
|
* @return array
|
|
* @throws \ReflectionException
|
|
*/
|
|
public function map(string $class, array $valuesArray){
|
|
|
|
$arguments = [];
|
|
$reflection = new \ReflectionMethod($class, 'execute');
|
|
$parameters = $reflection->getParameters();
|
|
|
|
foreach ($parameters as $parameter){
|
|
|
|
if(!$parameter->getClass()){
|
|
$arguments[] = self::mapVariables($parameter->getType(), $valuesArray[Str::snake($parameter->getName())]?? null);
|
|
continue;
|
|
}
|
|
|
|
$className = $parameter->getClass()->getName();
|
|
|
|
if(!in_array($className, [OrderObject::class, StepObject::class, Carbon::class])){
|
|
$arguments[] = self::mapClassObjects($className, $valuesArray);
|
|
}
|
|
}
|
|
|
|
return $arguments;
|
|
}
|
|
|
|
/**
|
|
* @param string $type
|
|
* @param $value
|
|
* @return bool|float|int|string
|
|
*/
|
|
private function mapVariables(string $type, $value){
|
|
|
|
if($value === null){
|
|
return null;
|
|
}
|
|
|
|
switch ($type){
|
|
case 'float':
|
|
return (float) $value;
|
|
break;
|
|
case 'int':
|
|
case 'integer':
|
|
return (int) $value;
|
|
break;
|
|
case 'bool':
|
|
case 'boolean':
|
|
return (bool) $value;
|
|
break;
|
|
default:
|
|
return (string) $value;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @param string $class
|
|
* @param array $valuesArray
|
|
* @return mixed
|
|
* @throws \ReflectionException
|
|
*/
|
|
private function mapClassObjects(string $class, array $valuesArray){
|
|
|
|
$reflection = new \ReflectionClass($class);
|
|
$properties = $reflection->getProperties();
|
|
|
|
return new $class(...array_map(function ($property) use ($valuesArray) {
|
|
return $valuesArray[Str::snake($property->getName())] ?? null;
|
|
}, $properties));
|
|
|
|
}
|
|
|
|
} |