/** * Validate the relationships of the given data * * @param mixed $data Data to validate * @param string $key Key to store any error messages against * * @return bool */ protected function validateRelationships($data, $key) { $passes = true; $transformer = $this->factory->make($data->type); if ($transformer === null) { $this->addErrorMessage($key, ['Transformer for ' . $data->type . ' does not exist.']); return false; } $relationships = $transformer->getNextPipesFromData($data); foreach ($relationships as $relationshipName => $relationship) { $messagesKey = $relationshipName; if ($key != '') { $messagesKey = $key . '.' . $messagesKey; } if (is_array($relationship)) { foreach ($relationship as $key => $item) { $messagesKey = $messagesKey . '.' . $key; if (!$this->validateSingleRelationshipItem($item, $messagesKey)) { $passes = false; } } continue; } $this->validateSingleRelationshipItem($relationship, $messagesKey); } return $passes; }
/** * Parses the data of the request * * @param stdClass $data Data sent by the user */ protected function parseData($data) { $type = $data->type; $transformer = $this->factory->make($type); $model = $transformer->transform($data); $relationships = $transformer->getNextPipesFromData($data); foreach ($relationships as $relationshipName => $relationshipData) { $relationshipIsArray = true; if (!is_array($relationshipData)) { $relationshipIsArray = false; $relationshipData = [$relationshipData]; } $relationshipData = array_map(function ($data) { return $this->parseData($data); }, $relationshipData); if ($relationshipIsArray === false) { $relationshipData = array_pop($relationshipData); } $transformer->attachRelationship($relationshipName, $model, $relationshipData); } return $model; }