예제 #1
0
 /**
  * @param $formName
  * @param array $formParams
  * @param DunglasResource $dunglasResource
  * @return array
  */
 protected function processFormParams($formName, array $formParams, DunglasResource $dunglasResource)
 {
     if (!is_null($formParams) && isset($formParams[$formName]['children'])) {
         $parameters = $formParams[$formName]['children'];
         $entityClass = $dunglasResource->getEntityClass();
         $metadataAttributes = $this->classMetadataFactory->getMetadataFor(new $entityClass())->getAttributes();
         $classMetadata = $this->entityManager->getClassMetadata($entityClass);
         $metadataAttributesValidation = isset($this->attributesValidationParser[$dunglasResource->getShortName()]) ? $this->attributesValidationParser[$dunglasResource->getShortName()] : [];
         foreach ($parameters as $key => $val) {
             if ($parameters[$key]['dataType'] === 'hidden') {
                 unset($parameters[$key]);
                 continue;
             }
             $format = isset($parameters[$key]['format']) ? $parameters[$key]['format'] : null;
             $metatdataKey = strtolower($key);
             if (isset($metadataAttributes[$key])) {
                 $metatdataKey = $key;
             }
             $metatdata = isset($metadataAttributes[$metatdataKey]) ? $metadataAttributes[$metatdataKey] : null;
             if (is_string($format) && is_object(json_decode($format))) {
                 $parameters[$key]['format'] = '[' . implode('|', array_keys(json_decode($format, true))) . ']';
             }
             if (!is_null($metatdata) && count($metatdata->getTypes()) > 0) {
                 $property = $metatdata->getTypes()[0];
                 if ($property->getType() === 'object' && $parameters[$key]['dataType'] !== 'boolean') {
                     $parameters[$key]['dataType'] = 'id of ' . $key;
                 }
                 if ($property->getClass() === 'Doctrine\\Common\\Collections\\Collection') {
                     $parameters[$key]['dataType'] = 'array of ' . $property->getType();
                 }
             }
             if ($parameters[$key]['dataType'] === 'boolean') {
                 $parameters[$key]['format'] = '[false|true]';
             }
             if (is_null($format) && $parameters[$key]['dataType'] === 'string') {
                 if (isset($metadataAttributesValidation[$key]['format']) && $metadataAttributesValidation[$key]['format'] !== '{not blank}') {
                     $parameters[$key]['format'] = $metadataAttributesValidation[$key]['format'];
                 } else {
                     if ($classMetadata->hasField($key)) {
                         $metatdataOrm = $classMetadata->getFieldMapping($key);
                         $maxLenght = isset($metatdataOrm['length']) ? $metatdataOrm['length'] : '255';
                         $parameters[$key]['format'] = '{length:  max: ' . $maxLenght . '}';
                     }
                 }
             }
         }
         return $parameters;
     }
     return $formParams;
 }
예제 #2
0
 /**
  * @param ResourceInterface $resource
  *
  * @return AttributeMetadataInterface
  */
 private function getIdentifierFromResource(ResourceInterface $resource)
 {
     $classMetadata = $this->classMetadataFactory->getMetadataFor($resource->getEntityClass(), $resource->getNormalizationGroups(), $resource->getDenormalizationGroups(), $resource->getValidationGroups());
     return $classMetadata->getIdentifier();
 }