/**
  * @param ResourceTransformer $transformer
  * @param $entity
  * @param Field $field
  * @param Context $context
  * @return array
  * @throws InvalidPropertyException
  */
 protected function resolvePath(ResourceTransformer $transformer, $entity, Field $field, Context $context)
 {
     $path = $this->splitPathParameters($field->getName());
     $name = array_pop($path);
     // If the water is deep enough, we need to first fetch the corresponding entity.
     // We will NOT create the entity if it doesn't exist.
     // Relationships support this functionality. Regular setters do not.
     if (count($path) > 0) {
         $entity = $this->resolveChildPath($transformer, $entity, $path, $field, $context);
     }
     list($name, $parameters) = $this->getPropertyNameAndParameters($transformer, $name, $context, $field, $entity);
     return [$entity, $name, $parameters];
 }
 /**
  * @param ResourceTransformer $transformer
  * @param mixed $entity
  * @param Field $field
  * @param Context $context
  * @return mixed
  * @throws InvalidPropertyException
  */
 public function resolveProperty(ResourceTransformer $transformer, $entity, Field $field, Context $context)
 {
     $path = $this->splitPathParameters($field->getName());
     return $this->resolveChildPath($transformer, $entity, $path, $field, $context);
 }
 /**
  * @param ResourceTransformer $transformer
  * @param array $parameters
  * @param Context $context
  * @param Field $field
  * @param null $entity
  * @return \mixed[]
  * @throws VariableNotFoundInContext
  */
 protected function parseParameters(ResourceTransformer $transformer, array $parameters, Context $context, Field $field = null, $entity = null)
 {
     $out = [];
     foreach ($parameters as $v) {
         if ($parameter = $this->getParameter($v)) {
             $value = $this->parseParameter($transformer, $parameter, $context, $entity);
             if ($value !== null) {
                 $out[] = $value;
             } else {
                 if ($field) {
                     throw new VariableNotFoundInContext('Field ' . $field->getName() . ' requires a parameter $' . $parameter . ' to be set in the context, but no such parameter was defined.');
                 } else {
                     throw new VariableNotFoundInContext('A parameter $' . $parameter . ' is required to be set in the context, but no such parameter was defined.');
                 }
             }
         } else {
             $out[] = $v;
         }
     }
     return $out;
 }