public function fromArray($resourceDefinition, array $body, ContextContract $context) : ResourceContract
    {
        $resourceDefinition = ResourceDefinitionLibrary::make($resourceDefinition);
        if (!Action::isWriteContext($context->getAction())) {
            throw InvalidContextAction::expectedWriteable($context->getAction());
        }

        $resource = new RESTResource($resourceDefinition);
        $resource->setSource($body);

        $fields = $resourceDefinition->getFields();

        foreach ($fields as $field) {
            $this->currentPath->push($field);

            if ($this->isWritable($field, $context)) {
                if ($field instanceof RelationshipField) {
                    $this->relationshipFromArray($field, $body, $resource, $context);
                } else {
                    try {
                        $value = $this->propertyResolver->resolvePropertyInput(
                            $this,
                            $body,
                            $field,
                            $context
                        );

                        $resource->setProperty($field, $value, true);
                    } catch (ValueUndefined $e) {
                        // Don't worry, be happy.
                    }
                }
            }
            $this->currentPath->pop();
        }

        return $resource;
    }
public function fromArray($resourceDefinition, array $body, ContextContract $context) : ResourceContract
    {
        $resourceDefinition = ResourceDefinitionLibrary::make($resourceDefinition);
        if (!Action::isWriteContext($context->getAction())) {
            throw InvalidContextAction::expectedWriteable($context->getAction());
        }

        $resource = new RESTResource($resourceDefinition);
        $resource->setSource($body);

        $fields = $resourceDefinition->getFields();

        foreach ($fields as $field) {
            $this->currentPath->push($field);

            if ($this->isWritable($field, $context)) {
                if ($field instanceof RelationshipField) {
                    $this->relationshipFromArray($field, $body, $resource, $context);
                } else {
                    try {
                        $value = $this->propertyResolver->resolvePropertyInput(
                            $this,
                            $body,
                            $field,
                            $context
                        );

                        $resource->setProperty($field, $value, true);
                    } catch (ValueUndefined $e) {
                        // Don't worry, be happy.
                    }
                }
            }
            $this->currentPath->pop();
        }

        return $resource;
    }
public function fromArray ( $ resourceDefinition , array $ body , ContextContract $ context ) : ResourceContract { $ resourceDefinition = ResourceDefinitionLibrary :: make ( $ resourceDefinition ) ; if ( ! Action :: isWriteContext ( $ context -> getAction ( ) ) ) { throw InvalidContextAction :: expectedWriteable ( $ context -> getAction ( ) ) ; } $ resource = new RESTResource ( $ resourceDefinition ) ; $ resource -> setSource ( $ body ) ; $ fields = $ resourceDefinition -> getFields ( ) ; foreach ( $ fields as $ field ) { $ this -> currentPath -> push ( $ field ) ; if ( $ this -> isWritable ( $ field , $ context ) ) { if ( $ field instanceof RelationshipField ) { $ this -> relationshipFromArray ( $ field , $ body , $ resource , $ context ) ; } else { try { $ value = $ this -> propertyResolver -> resolvePropertyInput ( $ this , $ body , $ field , $ context ) ; $ resource -> setProperty ( $ field , $ value , true ) ; } catch ( ValueUndefined $ e ) { // Don't worry, be happy. } } } $ this -> currentPath -> pop ( ) ; } return $ resource ; }
Create a resource from a data array
@param $resourceDefinition
@param array $body
@param ContextContract $context
@return ResourceContract
@throws InvalidPropertyException
@throws InvalidContextAction
Create a resource from a data array