$defs It can be a string or field definition from entityDefs. * @return ?array */ public function getFieldDefsByType($defs) { if (isset($defs['type'])) { return $this->metadata->get('fields.' . $defs['type']); } return null; } /** * @param array $defs * @return ?array */ public function getFieldDefsInFieldMetadata($defs) { $fieldDefsByType = $this->getFieldDefsByType($defs); if (isset($fieldDefsByType['fieldDefs'])) { return $fieldDefsByType['fieldDefs']; } return null; } /** * Get link definition defined in 'fields' metadata. * In linkDefs can be used as value (e.g. "type": "hasChildren") and/or variables (e.g. "entityName": "{entity}"). * Variables should be defined into fieldDefs (in 'entityDefs' metadata). * * @param string $entityType * @param array $defs * @return ?array */ public function getLinkDefsInFieldMeta($entityType, $defs) { $fieldDefsByType = $this->getFieldDefsByType($defs); if (!isset($fieldDefsByType['linkDefs'])) { return null; } $linkFieldDefsByType = $fieldDefsByType['linkDefs']; foreach ($linkFieldDefsByType as &$paramValue) { if (preg_match('/{(.*?)}/', $paramValue, $matches)) { if (in_array($matches[1], array_keys($defs))) { $value = $defs[$matches[1]]; } else if (strtolower($matches[1]) == 'entity') { $value = $entityType; } if (isset($value)) { $paramValue = str_replace('{'.$matches[1].'}', $value, $paramValue); } } } return $linkFieldDefsByType; } }