getProperty() public method

public getProperty ( $name ) : Property
return Property
 /**
  * Get BuilderDefinition from entity property
  *
  * @param string $propertyName
  * @param bool $fillValues
  * @return BuilderDefinition|null
  * @throws InvalidStateException
  */
 private function getPropertyRule($propertyName, $fillValues = TRUE)
 {
     $property = $this->entityReflection->getProperty($propertyName);
     $annotations = $this->annotationReader->getPropertyAnnotations($property);
     $rule = new BuilderDefinition($propertyName);
     foreach ($annotations as $annotation) {
         switch (get_class($annotation)) {
             case 'Doctrine\\ORM\\Mapping\\Column':
                 if ($this->getEntityPrimaryKeyName($this->entity) === $propertyName) {
                     $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_HIDDEN);
                     $rule->setRequired(FALSE);
                 } else {
                     $type = BuilderDefinition::COMPONENT_TYPE_TEXT;
                     $rule->setRequired(!$annotation->nullable);
                     /** @var Column $annotation */
                     if ($annotation->type === 'boolean') {
                         $type = BuilderDefinition::COMPONENT_TYPE_CHECKBOX;
                     }
                     // is numeric?
                     if ($annotation->type === 'integer' || $annotation->type === 'float' || $annotation->type === 'bigint' || $annotation->type === 'decimal' || $annotation->type === 'smallint') {
                         $rule->addValidationRule(Form::NUMERIC, 'This is required in numeric format', TRUE);
                     }
                     $rule->setComponentType($type);
                 }
                 break;
             case 'Doctrine\\ORM\\Mapping\\ManyToOne':
                 /** @var ManyToOne $annotation */
                 $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_SELECT);
                 if ($fillValues) {
                     $rule->setValues($this->getPossibleValues($annotation->targetEntity));
                 }
                 $rule->setTargetEntity($annotation->targetEntity);
                 $rule->setRequired(TRUE);
                 break;
             case 'Doctrine\\ORM\\Mapping\\ManyToMany':
                 /** @var OneToMany $annotation */
                 $rule->setComponentType(BuilderDefinition::COMPONENT_TYPE_MULTI_SELECT);
                 if ($fillValues) {
                     $rule->setValues($this->getPossibleValues($annotation->targetEntity));
                 }
                 $rule->setRequired(TRUE);
                 $rule->setTargetEntity($annotation->targetEntity);
                 break;
             case 'Doctrine\\ORM\\Mapping\\JoinColumn':
                 /** @var JoinColumn $annotation */
                 $rule->setRequired(!$annotation->nullable);
                 break;
         }
     }
     return $rule->getComponentType() === NULL ? NULL : $rule;
 }
Example #2
0
 private function assign(array $data)
 {
     $errors = array();
     foreach ($data as $propertyName => $value) {
         $pr = new ClassType($this);
         if (trim($value) == '') {
             $value = NULL;
         }
         $propertyName = Strings::underdashToCamel($propertyName);
         if ($pr->hasProperty($propertyName)) {
             $property = $pr->getProperty($propertyName);
             if ($property->getAnnotation('var') == 'DateTime' && $value !== NULL) {
                 $value = new DateTime($value);
             }
             $this->{$propertyName} = $value;
         } else {
             $errors[] = $propertyName;
         }
     }
 }
Example #3
0
 /**
  * @param $name
  * @param $arguments
  * @throws LogicException
  * @return mixed|void
  */
 public function __call($name, $arguments)
 {
     $prefix = substr($name, 0, 3);
     if ($prefix === 'get') {
         return $this->{lcfirst(substr($name, 3))};
     } elseif ($prefix === 'set') {
         $reflection = new ClassType($this);
         $propertyName = lcfirst(substr($name, 3));
         if ($reflection->hasProperty($propertyName) && ($range = $reflection->getProperty($propertyName)->getAnnotation('range')) !== NULL) {
             $dataLength = strlen($arguments[0]);
             if ($range instanceof ArrayHash && count($range) == 2 && ($range[0] > $dataLength || $dataLength > $range[1])) {
                 throw new LogicException(sprintf('%s bad range <%d,%d> ... value %d', $propertyName, $range[0], $range[1], $dataLength));
             } else {
                 if (is_integer($range) && $dataLength != $range) {
                     throw new LogicException('bad length ' . $propertyName . ' ' . strlen($name) . ' - ' . $range);
                 }
             }
         }
         $this->{$propertyName} = reset($arguments);
     }
 }
 /**
  * @dataProvider dataStringFields
  */
 public function testSetFieldValue($class, $fields)
 {
     $metadata = $this->getMetadataFor($class);
     foreach ($fields as $field) {
         $className = 'Tests\\NForms\\Models\\' . $class;
         $reflection = new Nette\Reflection\ClassType($className);
         $object = new $className();
         $metadata->setFieldValue($object, $field, "test string");
         if ($reflection->hasProperty($field) && $reflection->getProperty($field)->isPublic()) {
             $value = $object->{$field};
         } else {
             $value = $object->{'get' . ucfirst($field)}();
         }
         Assert::same('test string', $value);
         $metadata->setFieldValue($object, $field, NULL);
         if ($reflection->hasProperty($field) && $reflection->getProperty($field)->isPublic()) {
             $value = $object->{$field};
         } else {
             $value = $object->{'get' . ucfirst($field)}();
         }
         Assert::same(NULL, $value);
     }
 }
 /**
  * Read property information
  * Read relations and base DB types for convert values to correct format
  *
  * @param object $baseEntity
  * @param string $name
  * @return array|NULL
  */
 private function readPropertyDataType($baseEntity, $name)
 {
     $annotationReader = new AnnotationReader();
     // read property information
     $reflectionClass = new ClassType($baseEntity);
     $property = $reflectionClass->getProperty($name);
     // if property exists
     if ($property !== NULL) {
         /** @var Column $column */
         $column = $annotationReader->getPropertyAnnotation($property, Column::class);
         /** @var ManyToOne $manyToOne */
         $manyToOne = $annotationReader->getPropertyAnnotation($property, ManyToOne::class);
         /** @var ManyToMany $manyToMany */
         $manyToMany = $annotationReader->getPropertyAnnotation($property, ManyToMany::class);
         /** @var OneToMany $oneToMany */
         $oneToMany = $annotationReader->getPropertyAnnotation($property, OneToMany::class);
         $type = NULL;
         $collection = FALSE;
         $relation = FALSE;
         if ($column !== NULL) {
             $type = $column->type;
             if (strrpos($type, 'array') !== FALSE) {
                 $type = \DateTime::class;
             } else {
                 if ($type === 'dateinterval') {
                     $type = \DateInterval::class;
                 } else {
                     if (strrpos($type, 'array') !== FALSE) {
                         $type = 'array';
                         $collection = TRUE;
                     }
                 }
             }
         } else {
             if ($manyToOne !== NULL) {
                 $type = $manyToOne->targetEntity;
                 $relation = TRUE;
             } else {
                 if ($manyToMany !== NULL || $oneToMany !== NULL) {
                     $collection = TRUE;
                     $type = $manyToMany === NULL ? $oneToMany->targetEntity : $manyToMany->targetEntity;
                     $relation = TRUE;
                 }
             }
         }
         return ['type' => $type, 'collection' => $collection, 'relation' => $relation];
     }
     return NULL;
 }