DD
Size: a a a
DD
RV
RV
С
return $this->serialier->deserialize(TYPE::JSON, $response, WeatherData::class)Это лего и просто сделать если в респонсе и DTO поля одинакого называются, но если нет, то надо как-то ухищряться указывать какое поле из Json на какое в dto нужно смаппить.
new WeatherData($decodedResponse['a'], $decodedResponse['b'])Но шоб не обращаться к неизвестным полям, я люблю сделать ещё пару функций типа
/**Выглядит как костыль но кмк норм, и psalm на типы не ругается, и получается чёт типа
* @throws \Exception
*/
function getFieldAsInt(string $fieldName, array $data): int {
if(!isset($data[$fieldName])) {
throw new \Exception('...');
}
if(!is_int($data[$fieldName])) {
throw new \Exception('...');
}
return $data[$fieldName];
}
return new WeatherData(
getFieldAsInt('temperature', $responseData),
getFieldAsFloat('lat', $responseData),
getFieldAsFloat('lng', $responseData),
getFieldAsString('city', $responseData)
);
DD
DD
RV
DD
С
RV
BT
DD
DD
BT
DD
DD
BT
BT
С
return $this->serialier->deserialize(TYPE::JSON, $response, WeatherData::class)Это лего и просто сделать если в респонсе и DTO поля одинакого называются, но если нет, то надо как-то ухищряться указывать какое поле из Json на какое в dto нужно смаппить.
new WeatherData($decodedResponse['a'], $decodedResponse['b'])Но шоб не обращаться к неизвестным полям, я люблю сделать ещё пару функций типа
/**Выглядит как костыль но кмк норм, и psalm на типы не ругается, и получается чёт типа
* @throws \Exception
*/
function getFieldAsInt(string $fieldName, array $data): int {
if(!isset($data[$fieldName])) {
throw new \Exception('...');
}
if(!is_int($data[$fieldName])) {
throw new \Exception('...');
}
return $data[$fieldName];
}
return new WeatherData(
getFieldAsInt('temperature', $responseData),
getFieldAsFloat('lat', $responseData),
getFieldAsFloat('lng', $responseData),
getFieldAsString('city', $responseData)
);
AK