/**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }