fileManager = $fileManager; $this->dateTime = $dateTime; $this->number = $number; } protected function formatNumber($value) { return $this->number->format($value); } protected function getDataFromEntity(Entity $entity) { $data = $entity->toArray(); $fieldDefs = $entity->getFields(); $fieldList = array_keys($fieldDefs); foreach ($fieldList as $field) { $type = null; if (!empty($fieldDefs[$field]['type'])) { $type = $fieldDefs[$field]['type']; } if ($type == Entity::DATETIME) { if (!empty($data[$field])) { $data[$field] = $this->dateTime->convertSystemDateTime($data[$field]); } } else if ($type == Entity::DATE) { if (!empty($data[$field])) { $data[$field] = $this->dateTime->convertSystemDate($data[$field]); } } else if ($type == Entity::JSON_ARRAY) { if (!empty($data[$field])) { $list = $data[$field]; $newList = []; foreach ($list as $item) { $v = $item; if ($item instanceof \StdClass) { $v = get_object_vars($v); } foreach ($v as $k => $w) { if (is_float($v[$k]) || is_int($v[$k])) { $v[$k] = $this->formatNumber($v[$k]); } } $newList[] = $v; } $data[$field] = $newList; } } else if ($type == Entity::JSON_OBJECT) { if (!empty($data[$field])) { $value = $data[$field]; if ($value instanceof \StdClass) { $data[$field] = get_object_vars($value); } foreach ($data[$field] as $k => $w) { if (is_float($data[$field][$k]) || is_int($data[$field][$k])) { $data[$field][$k] = $this->formatNumber($data[$field][$k]); } } } } if (!empty($data[$field])) { if (is_float($data[$field]) || is_int($data[$field])) { $data[$field] = $this->formatNumber($data[$field]); } } } return $data; } public function render(Entity $entity, $template) { $code = \LightnCandy::compile($template); $id = uniqid('', true); $fileName = 'data/cache/template-' . $id; $this->fileManager->putContents($fileName, $code); $renderer = include($fileName); $this->fileManager->removeFile($fileName); $data = $this->getDataFromEntity($entity); return $renderer($data); } }