Пример #1
0
 public function __construct(array $objects, TypeFactory $types)
 {
     $this->objects = $objects;
     $this->properties = [];
     if ($objects) {
         $reader = new PropertyReader($types, get_class($objects[0]));
         $this->properties = $reader->readInterface($objects[0])->filter(function (Property $property) {
             return $property->canGet();
         });
     }
 }
Пример #2
0
 /**
  * @param Parameter $parameter
  * @param null $serialized
  * @return object
  */
 public function inflate(Parameter $parameter, $serialized)
 {
     $reader = new PropertyReader($this->types, $this->getClass($parameter));
     $properties = [];
     foreach ($reader->readInterface() as $property) {
         $propertyParameter = new Parameter($parameter->getName() . '-' . $property->name(), $property->type());
         $field = $this->getField($propertyParameter);
         $properties[$property->name()] = $field->inflate($propertyParameter, $this->reader->read($propertyParameter));
     }
     $injector = new Injector(new Factory());
     $instance = $injector->injectConstructor($this->getClass($parameter), $properties, function () {
         return false;
     });
     foreach ($reader->readInterface() as $property) {
         $value = $properties[$property->name()];
         if (!is_null($value) && $property->canSet()) {
             $property->set($instance, $value);
         }
     }
     return $instance;
 }
Пример #3
0
 /**
  * @param $value
  * @return array
  */
 private function getProperties($value)
 {
     $reader = new PropertyReader($this->types, get_class($value));
     $map = [];
     foreach ($reader->readInterface($value) as $property) {
         if (!$property->canGet()) {
             continue;
         }
         $map[$property->name()] = $property->get($value);
     }
     return $map;
 }
Пример #4
0
 protected function createInstance(array $parameters)
 {
     $injector = new Injector(new Factory());
     $instance = $injector->injectConstructor($this->class->name, $parameters, function () {
         return false;
     });
     foreach ($this->reader->readInterface() as $property) {
         if ($property->canSet() && array_key_exists($property->name(), $parameters)) {
             $property->set($instance, $parameters[$property->name()]);
         }
     }
     return $instance;
 }
Пример #5
0
 function determineTypeByHintToOtherConstants()
 {
     eval('class EnumerationHintToOtherConstants {
         /** @var ClassContainingTheConstants::FOO* */
         public $foo;
     }');
     eval('class ClassContainingTheConstants {
         const FOO_ONE = "one";
         const FOO_TWO = "two";
     }');
     $reader = new PropertyReader(new TypeFactory(), 'EnumerationHintToOtherConstants');
     $properties = $reader->readInterface();
     $this->assert($properties['foo']->type(), new EnumerationType(['one' => 'One', 'two' => 'Two'], new StringType()));
 }
Пример #6
0
 /**
  * @param mixed $value
  * @return mixed
  */
 public function render($value)
 {
     if (method_exists($value, '__toString')) {
         return (string) $value;
     }
     $output = ['### ' . (new \ReflectionClass($value))->getShortName() . ' ###'];
     $reader = new PropertyReader($this->types, $value);
     foreach ($reader->readInterface($value) as $property) {
         if (!$property->canGet()) {
             continue;
         }
         $propertyValue = $property->get($value);
         $rendered = $this->renderers->getRenderer($propertyValue)->render($propertyValue);
         $output[] = ucfirst($property->name()) . ': ' . rtrim(str_replace(PHP_EOL, PHP_EOL . '    ', $rendered));
     }
     return implode(PHP_EOL, $output) . PHP_EOL;
 }
Пример #7
0
 private function renderPropertyFields(Parameter $parameter, $object)
 {
     $reader = new PropertyReader($this->types, $this->getClass($parameter));
     $fields = [];
     foreach ($reader->readInterface($object) as $property) {
         if (!$property->canSet()) {
             continue;
         }
         $param = $this->makePropertyParameter($parameter, $property);
         $fields[] = new Element('div', ['class' => 'form-group'], [new Element('label', [], [ucfirst($property->name()) . ($property->isRequired() ? '*' : '')]), $this->getField($param)->render($param, $object ? $property->get($object) : null)]);
     }
     return $fields;
 }
 private function whenIDetermineThePropertiesOf($class)
 {
     $reflection = new \ReflectionClass($class);
     $this->object = $reflection->newInstanceArgs($this->args);
     $reader = new PropertyReader(new TypeFactory(), $class);
     $this->properties = $reader->readInterface($this->object);
 }
Пример #9
0
 private function getProperties(Parameter $parameter, $object = null)
 {
     $reader = new PropertyReader($this->types, $this->getClass($parameter));
     foreach ($reader->readInterface($object) as $property) {
         if ($property->canSet()) {
             (yield $property);
         }
     }
 }
Пример #10
0
 /**
  * @param object|null $object
  * @return \watoki\collections\Map|\watoki\reflect\Property[] indexed by property name
  */
 public function getProperties($object = null)
 {
     $reader = new PropertyReader(new TypeFactory(), $this->getClass());
     return $reader->readInterface($object);
 }