|
5 | 5 | namespace Bone\Generator\Service\Api; |
6 | 6 |
|
7 | 7 | use Bone\Generator\Traits\CanGenerateFile; |
8 | | -use Doctrine\DBAL\Types\Types; |
9 | 8 | use Nette\PhpGenerator\ClassType; |
10 | 9 | use Nette\PhpGenerator\PhpFile; |
11 | 10 | use Nette\PhpGenerator\PhpNamespace; |
@@ -54,17 +53,10 @@ public function generateEntity($outputFolder, string $baseNamespace, string $ent |
54 | 53 | $this->createField($namespace, $class, $field); |
55 | 54 | } |
56 | 55 |
|
| 56 | + $this->createToArray($class, $fields); |
57 | 57 | $this->writeFile($file, $fileName); |
58 | 58 | } |
59 | 59 |
|
60 | | - private function createPHPFile(): PhpFile |
61 | | - { |
62 | | - $file = new PhpFile(); |
63 | | - $file->setStrictTypes(); |
64 | | - |
65 | | - return $file; |
66 | | - } |
67 | | - |
68 | 60 | private function createNamespace(PhpFile $file, string $entityNamespace): PhpNamespace |
69 | 61 | { |
70 | 62 | $namespace = $file->addNamespace($entityNamespace); |
@@ -115,7 +107,7 @@ private function createField(PhpNamespace $namespace, ClassType $class, array $d |
115 | 107 | $property->setPrivate(); |
116 | 108 | $property->setType($phpType); |
117 | 109 | $attributeData = ['type' => $doctrineType]; |
118 | | - $regex = '#.max:+(?<length>\d+).+#'; |
| 110 | + $regex = '#.+max:(?<length>\d+).+#'; |
119 | 111 | preg_match($regex, $validation, $result); |
120 | 112 |
|
121 | 113 | if ($result['length']) { |
@@ -217,4 +209,33 @@ private function addGetterAndSetter(string $field, string $type, ClassType $clas |
217 | 209 | $getter->setBody($getterBody); |
218 | 210 | $setter->setBody($setterBody); |
219 | 211 | } |
| 212 | + |
| 213 | + private function createToArray(ClassType $class, array $fields): void |
| 214 | + { |
| 215 | + $method = $class->addMethod('toArray'); |
| 216 | + $method->setReturnType('array'); |
| 217 | + $body = "return [\n"; |
| 218 | + |
| 219 | + foreach ($fields as $field) { |
| 220 | + $body .= ' \'' . $field['name'] . '\' => '; |
| 221 | + $body .= $this->getToArrayGetter($field['name'], $field['type']); |
| 222 | + $body .= "\n"; |
| 223 | + } |
| 224 | + |
| 225 | + $body .= '];'; |
| 226 | + $method->setBody($body); |
| 227 | + } |
| 228 | + |
| 229 | + private function getToArrayGetter(string $field, string $type): string |
| 230 | + { |
| 231 | + switch ($type) { |
| 232 | + case 'date': |
| 233 | + case 'datetime': |
| 234 | + return '$this->' . $field . '->format(\'Y-m-d H:i:s\'),'; |
| 235 | + case 'json': |
| 236 | + return '$this->get' . ucfirst($field) . '(),'; |
| 237 | + default: |
| 238 | + return '$this->' . $field . ','; |
| 239 | + } |
| 240 | + } |
220 | 241 | } |
0 commit comments