/**
  * Create New Object
  *
  * @param string  $class   Class name
  * @param Request $request HTTP request
  * @param bool    $create  Should a missing object be created?
  * @param array   $options Param converter options
  * @throws \RuntimeException
  * @return CrudEntityInterface|mixed
  */
 public function createNewObject($class, Request $request, $create, $options)
 {
     $ids = [];
     $data = $create ? json_decode($request->getContent(), true) : [];
     if (!is_array($data)) {
         throw new RuntimeException('Invalid JSON request content');
     }
     // Convert array into object and test validity
     $object = $this->crudTransformer->arrayToObject($data, $class);
     if ($object instanceof ValidatableInterface && $create) {
         $violations = $this->crudTransformer->arrayToObjectPropertyValidation($data, $class);
         $valid = !(bool) $violations->count();
         $object->setViolations($violations);
         $object->setValid($valid);
     }
     // Get list of ids from request attributes
     if (!$create && $object instanceof CrudEntityInterface) {
         foreach ($object->getIds() as $field => $value) {
             $ids[$field] = $request->attributes->get($field);
         }
         $object->setIds($ids);
     }
     // Convert external entity references into associated objects
     if (isset($options['references'])) {
         $references = !is_array(current($options['references'])) ? array($options['references']) : $options['references'];
         foreach ($references as $reference) {
             $entity = $this->findObject($reference['class'], $request, array_merge($reference, $options), $reference['name']);
             $setter = $this->crudTransformer->getPropertySetter($reference['name']);
             if (method_exists($object, $setter) && is_object($entity)) {
                 $object->{$setter}($entity);
             }
         }
     }
     return $object;
 }
 /**
  * Test Array To Object Validation
  *
  * @return void
  */
 public function testArrayToObjectValidation()
 {
     $classMetadata = $this->prepareClassMetadata();
     $this->entityManager->expects($this->once())->method('getClassMetadata')->willReturn($classMetadata);
     $this->crudTransformer->initializeClassMetadata('className');
     $errors = $this->crudTransformer->arrayToObjectPropertyValidation(array('invalid' => 'test'), 'className');
     $this->assertEquals(1, $errors->count());
     $this->assertEquals('This is not a valid property of className', $errors->get(0)->getMessage());
 }