Пример #1
0
 /**
  * @param string $entityClass
  * @param array  $fieldsDefinition
  * @param array  $filterFieldsConfig
  */
 protected function filterAssociations($entityClass, &$fieldsDefinition, &$filterFieldsConfig)
 {
     $metadata = $this->doctrineHelper->getEntityMetadataForClass($entityClass);
     $associationsMapping = $metadata->getAssociationMappings();
     foreach ($associationsMapping as $fieldName => $mapping) {
         $identifierFieldNames = $this->doctrineHelper->getEntityIdentifierFieldNamesForClass($mapping['targetEntity']);
         if (!isset($filterFieldsConfig[$fieldName]) || (!isset($fieldsDefinition[$fieldName][ConfigUtil::DEFINITION][ConfigUtil::FIELDS]) || !is_array($fieldsDefinition[$fieldName][ConfigUtil::DEFINITION][ConfigUtil::FIELDS]))) {
             continue;
         }
         $associationAllowedFields = $filterFieldsConfig[$fieldName];
         foreach ($fieldsDefinition[$fieldName][ConfigUtil::DEFINITION][ConfigUtil::FIELDS] as $name => &$def) {
             if (in_array($name, $identifierFieldNames, true)) {
                 continue;
             }
             if (!in_array($name, $associationAllowedFields, true) && !ConfigUtil::isMetadataProperty($name)) {
                 if (is_array($def)) {
                     $def = array_merge($def, [ConfigUtil::EXCLUDE => true]);
                 } else {
                     $def = [ConfigUtil::EXCLUDE => true];
                 }
             }
         }
     }
 }