Ubiquity  2.0.2
php rapid development framework
ModelParser.php
Go to the documentation of this file.
1 <?php
2 
3 namespace Ubiquity\orm\parser;
4 
7 
8 class ModelParser {
9  protected $global;
10  protected $primaryKeys;
11  protected $manytoOneMembers;
12  protected $oneToManyMembers;
13  protected $manyToManyMembers;
14  protected $joinColumnMembers;
15  protected $joinTableMembers;
16  protected $nullableMembers=[ ];
17  protected $notSerializableMembers=[ ];
18  protected $fieldNames;
19  protected $fieldTypes=[];
20  protected $yuml;
21 
22  public function parse($modelClass) {
23  $instance=new $modelClass();
24  $this->primaryKeys=Reflexion::getKeyFields($instance);
25  $this->oneToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@oneToMany");
26  $this->manytoOneMembers=Reflexion::getMembersNameWithAnnotation($modelClass, "@manyToOne");
27  $this->manyToManyMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@manyToMany");
28  $this->joinColumnMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinColumn");
29  $this->joinTableMembers=Reflexion::getMembersAnnotationWithAnnotation($modelClass, "@joinTable");
30  $yuml=Reflexion::getAnnotationClass($modelClass, "@yuml");
31  if(\sizeof($yuml)>0)
32  $this->yuml=$yuml[0];
33  $properties=Reflexion::getProperties($instance);
34  foreach ( $properties as $property ) {
35  $propName=$property->getName();
36  $this->fieldNames[$propName]=Reflexion::getFieldName($modelClass, $propName);
37  $nullable=Reflexion::isNullable($modelClass, $propName);
38  $serializable=Reflexion::isSerializable($modelClass, $propName);
39  if ($nullable)
40  $this->nullableMembers[]=$propName;
41  if (!$serializable)
42  $this->notSerializableMembers[]=$propName;
43  $type=Reflexion::getDbType($modelClass, $propName);
44  if($type===false)
45  $type="mixed";
46  $this->fieldTypes[$propName]=$type;
47  }
48  $this->global["#tableName"]=Reflexion::getTableName($modelClass);
49  }
50 
51  public function __toString() {
52  $result=$this->global;
53  $result["#primaryKeys"]=$this->primaryKeys;
54  $result["#manyToOne"]=$this->manytoOneMembers;
55  $result["#fieldNames"]=$this->fieldNames;
56  $result["#fieldTypes"]=$this->fieldTypes;
57  $result["#nullable"]=$this->nullableMembers;
58  $result["#notSerializable"]=$this->notSerializableMembers;
59  if(isset($this->yuml))
60  $result["#yuml"]=$this->yuml->getPropertiesAndValues();
61  foreach ( $this->oneToManyMembers as $member => $annotation ) {
62  $result["#oneToMany"][$member]=$annotation->getPropertiesAndValues();
63  }
64  foreach ( $this->manyToManyMembers as $member => $annotation ) {
65  $result["#manyToMany"][$member]=$annotation->getPropertiesAndValues();
66  }
67 
68  foreach ( $this->joinTableMembers as $member => $annotation ) {
69  $result["#joinTable"][$member]=$annotation->getPropertiesAndValues();
70  }
71 
72  foreach ( $this->joinColumnMembers as $member => $annotation ) {
73  $result["#joinColumn"][$member]=$annotation->getPropertiesAndValues();
74  $result["#invertedJoinColumn"][$annotation->name]=[ "member" => $member,"className" => ClassUtils::cleanClassname($annotation->className) ];
75  }
76  return "return " . UArray::asPhpArray($result, "array") . ";";
77  }
78 }
static getProperties($instance)
Definition: Reflexion.php:15
static getKeyFields($instance)
Definition: Reflexion.php:30
static asPhpArray($array, $prefix="")
Definition: UArray.php:27
static getDbType($class, $member)
Definition: Reflexion.php:136
static getAnnotationClass($class, $annotation)
Definition: Reflexion.php:76
static getMembersNameWithAnnotation($class, $annotation)
Definition: Reflexion.php:117
static cleanClassname($classname)
Definition: ClassUtils.php:20
static getMembersAnnotationWithAnnotation($class, $annotation)
Definition: Reflexion.php:95
static getFieldName($class, $member)
Definition: Reflexion.php:151
static isNullable($class, $member)
Definition: Reflexion.php:128
static isSerializable($class, $member)
Definition: Reflexion.php:144