瀏覽代碼

SchemaSnippetsMaker now also completes new entities

Olivier Massot 1 年之前
父節點
當前提交
c11edea945
共有 1 個文件被更改,包括 34 次插入24 次删除
  1. 34 24
      src/Service/Doctrine/SchemaValidation/SchemaSnippetsMaker.php

+ 34 - 24
src/Service/Doctrine/SchemaValidation/SchemaSnippetsMaker.php

@@ -61,33 +61,27 @@ class SchemaSnippetsMaker
 
             $methods = [];
 
-            if (is_array($differences)) {
-                foreach ($differences as $field => $difference) {
-                    if (!is_array($difference->getExpectedType()))
-                    {
-                        $prop = $this->makeSnippetEntitySimpleProp($field, $difference->getExpectedType());
-                        $methods[] = $this->makeSnippetGetterForProp($prop);
-                        $methods[] = $this->makeSnippetSetterForProp($prop);
-
-                    } else {
-                        $prop = $this->makeSnippetEntityCollectionProp($field, $difference->getExpectedType());
-                        $methods[] = $this->makeSnippetGetterForProp($prop);
-
-                        if (
-                            isset($difference->getExpectedType()['type']) &&
-                            in_array($difference->getExpectedType()['type'], [ClassMetadataInfo::ONE_TO_MANY, ClassMetadataInfo::MANY_TO_MANY])
-                        ) {
-                            $methods[] = $this->makeSnippetAdderForCollection($prop);
-                            $methods[] = $this->makeSnippetRemoverForCollection($prop);
-                        } else {
-                            $methods[] = $this->makeSnippetSetterForProp($prop);
-                        }
-                    }
-                    $class->addMember($prop);
+            $expectedFields = [];
+            if (!is_array($differences)) {
+                // New entity
+                foreach ($differences->getExpectedType() as $field => $type) {
+                    $expectedFields[$field] = $type;
                 }
             } else {
-                $prop = $this->makeIdPropertySnippet();
+                // Existing entity
+                foreach ($differences as $field => $difference) {
+                    $expectedFields[$field] = $difference->getExpectedType();
+                }
+            }
+
+            foreach ($expectedFields as $field => $expectedType) {
+                $prop = is_array($expectedType) ?
+                    $this->makeSnippetEntityCollectionProp($field, $expectedType) :
+                    $this->makeSnippetEntitySimpleProp($field, $expectedType);
+
                 $class->addMember($prop);
+
+                $methods = [...$methods, ...$this->makeMethodsSnippetForProp($field, $prop) ];
             }
 
             foreach ($methods as $method) {
@@ -114,6 +108,22 @@ class SchemaSnippetsMaker
         }
     }
 
+    protected function makeMethodsSnippetForProp(string $field, Property $prop): array {
+        $methods = [];
+
+        if ($prop->getType() !== 'Collection')
+        {
+            $methods[] = $this->makeSnippetGetterForProp($prop);
+            $methods[] = $this->makeSnippetSetterForProp($prop);
+        } else {
+            $methods[] = $this->makeSnippetGetterForProp($prop);
+            $methods[] = $this->makeSnippetAdderForCollection($prop);
+            $methods[] = $this->makeSnippetRemoverForCollection($prop);
+        }
+
+        return $methods;
+    }
+
     /**
      * Génère un objet ClassType
      * @see https://api.nette.org/php-generator/master/Nette/PhpGenerator/ClassType.html