/** * {@inheritDoc} */ public function isListedPropertyCheck(PropertyMetadata $property, Context $navigatorContext) { if (empty($this->fields)) { return false; } $name = $property->serializedName ?: $property->name; switch (true) { case $property->type["name"] == "ArrayCollection": $this->classFields[$property->type["params"][0]["name"]] = $navigatorContext->getDepth() == 1 ? $name : $this->classFields[$property->class] . "." . $name; break; case strpos($property->type["name"], "\\"): $this->classFields[$property->type["name"]] = $navigatorContext->getDepth() == 1 ? $name : $this->classFields[$property->class] . "." . $name; break; default: break; } $data = $this->fields; if ($navigatorContext->getDepth() > 1) { $prefix = $this->classFields[$property->class]; $prefix_parts = explode(".", $prefix); foreach ($prefix_parts as $part) { $data = isset($data[$part]) ? $data[$part] : []; } } return isset($data[$name]); }
private function isTooDeep(Context $context) { $depth = $context->getDepth(); $groups = $context->attributes->get('groups')->get(); $metadataStack = $context->getMetadataStack(); $nthProperty = 0; // iterate from the first added items to the lasts for ($i = $metadataStack->count() - 1; $i > 0; $i--) { $metadata = $metadataStack[$i]; if ($metadata instanceof PropertyMetadata) { $maxDepth = null; if ($metadata->maxDepth) { if (!is_array($metadata->maxDepth)) { $maxDepth = (int) $metadata->maxDepth; } else { foreach ($groups as $group) { if (array_key_exists($group, $metadata->maxDepth) && $metadata->maxDepth[$group] > $maxDepth) { $maxDepth = $metadata->maxDepth[$group]; } } } } $nthProperty++; $relativeDepth = $depth - $nthProperty; if (null !== $maxDepth && $relativeDepth > $maxDepth) { return true; } } } return false; }
/** * {@inheritDoc} */ public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext) { if (empty($this->fields)) { return false; } $name = $property->serializedName ?: $property->name; $this->trackDepth($name, $navigatorContext->getDepth()); return !in_array($name, $this->getFields()); }
/** * {@inheritDoc} */ public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext) { $name = $property->serializedName ?: $property->name; if (!in_array($name, $this->fields)) { return false; } if ($navigatorContext->getDepth() == 1) { return false; } return true; }
private function isTooDeep(Context $context) { $depth = $context->getDepth(); $metadataStack = $context->getMetadataStack(); $nthProperty = 0; // iterate from the first added items to the lasts for ($i = $metadataStack->count() - 1; $i > 0; $i--) { $metadata = $metadataStack[$i]; if ($metadata instanceof PropertyMetadata) { $nthProperty++; $relativeDepth = $depth - $nthProperty; if (null !== $metadata->maxDepth && $relativeDepth > $metadata->maxDepth) { return true; } } } return false; }