protected function transformObjectToDocument($object, array $fields, $identifier = '')
    {
        $document = new Document($identifier, [], '', $this->options['index']);

        if ($this->dispatcher) {
            $event = new TransformEvent($document, $fields, $object);
            $this->dispatcher->dispatch(TransformEvent::PRE_TRANSFORM, $event);

            $document = $event->getDocument();
        }

        foreach ($fields as $key => $mapping) {
            if ('_parent' == $key) {
                $property = (null !== $mapping['property']) ? $mapping['property'] : $mapping['type'];
                $value = $this->propertyAccessor->getValue($object, $property);
                $document->setParent($this->propertyAccessor->getValue($value, $mapping['identifier']));

                continue;
            }

            $path = isset($mapping['property_path']) ?
                $mapping['property_path'] :
                $key;
            if (false === $path) {
                continue;
            }
            $value = $this->propertyAccessor->getValue($object, $path);

            if (isset($mapping['type']) && in_array(
                    $mapping['type'], ['nested', 'object']
                ) && isset($mapping['properties']) && !empty($mapping['properties'])
            ) {
                /* $value is a nested document or object. Transform $value into
                 * an array of documents, respective the mapped properties.
                 */
                $document->set($key, $this->transformNested($value, $mapping['properties']));

                continue;
            }

            if (isset($mapping['type']) && 'attachment' == $mapping['type']) {
                // $value is an attachment. Add it to the document.
                if ($value instanceof \SplFileInfo) {
                    $document->addFile($key, $value->getPathName());
                } else {
                    $document->addFileContent($key, $value);
                }

                continue;
            }

            $document->set($key, $this->normalizeValue($value));
        }

        if ($this->dispatcher) {
            $event = new TransformEvent($document, $fields, $object);
            $this->dispatcher->dispatch(TransformEvent::POST_TRANSFORM, $event);

            $document = $event->getDocument();
        }

        return $document;
    }
protected function transformObjectToDocument($object, array $fields, $identifier = '')
    {
        $document = new Document($identifier, [], '', $this->options['index']);

        if ($this->dispatcher) {
            $event = new TransformEvent($document, $fields, $object);
            $this->dispatcher->dispatch(TransformEvent::PRE_TRANSFORM, $event);

            $document = $event->getDocument();
        }

        foreach ($fields as $key => $mapping) {
            if ('_parent' == $key) {
                $property = (null !== $mapping['property']) ? $mapping['property'] : $mapping['type'];
                $value = $this->propertyAccessor->getValue($object, $property);
                $document->setParent($this->propertyAccessor->getValue($value, $mapping['identifier']));

                continue;
            }

            $path = isset($mapping['property_path']) ?
                $mapping['property_path'] :
                $key;
            if (false === $path) {
                continue;
            }
            $value = $this->propertyAccessor->getValue($object, $path);

            if (isset($mapping['type']) && in_array(
                    $mapping['type'], ['nested', 'object']
                ) && isset($mapping['properties']) && !empty($mapping['properties'])
            ) {
                /* $value is a nested document or object. Transform $value into
                 * an array of documents, respective the mapped properties.
                 */
                $document->set($key, $this->transformNested($value, $mapping['properties']));

                continue;
            }

            if (isset($mapping['type']) && 'attachment' == $mapping['type']) {
                // $value is an attachment. Add it to the document.
                if ($value instanceof \SplFileInfo) {
                    $document->addFile($key, $value->getPathName());
                } else {
                    $document->addFileContent($key, $value);
                }

                continue;
            }

            $document->set($key, $this->normalizeValue($value));
        }

        if ($this->dispatcher) {
            $event = new TransformEvent($document, $fields, $object);
            $this->dispatcher->dispatch(TransformEvent::POST_TRANSFORM, $event);

            $document = $event->getDocument();
        }

        return $document;
    }
protected function transformObjectToDocument ( $ object , array $ fields , $ identifier = '' ) { $ document = new Document ( $ identifier , [ ] , '' , $ this -> options [ 'index' ] ) ; if ( $ this -> dispatcher ) { $ event = new TransformEvent ( $ document , $ fields , $ object ) ; $ this -> dispatcher -> dispatch ( TransformEvent :: PRE_TRANSFORM , $ event ) ; $ document = $ event -> getDocument ( ) ; } foreach ( $ fields as $ key => $ mapping ) { if ( '_parent' == $ key ) { $ property = ( null !== $ mapping [ 'property' ] ) ? $ mapping [ 'property' ] : $ mapping [ 'type' ] ; $ value = $ this -> propertyAccessor -> getValue ( $ object , $ property ) ; $ document -> setParent ( $ this -> propertyAccessor -> getValue ( $ value , $ mapping [ 'identifier' ] ) ) ; continue ; } $ path = isset ( $ mapping [ 'property_path' ] ) ? $ mapping [ 'property_path' ] : $ key ; if ( false === $ path ) { continue ; } $ value = $ this -> propertyAccessor -> getValue ( $ object , $ path ) ; if ( isset ( $ mapping [ 'type' ] ) && in_array ( $ mapping [ 'type' ] , [ 'nested' , 'object' ] ) && isset ( $ mapping [ 'properties' ] ) && ! empty ( $ mapping [ 'properties' ] ) ) { /* $value is a nested document or object. Transform $value into
                 * an array of documents, respective the mapped properties.
                 */ $ document -> set ( $ key , $ this -> transformNested ( $ value , $ mapping [ 'properties' ] ) ) ; continue ; } if ( isset ( $ mapping [ 'type' ] ) && 'attachment' == $ mapping [ 'type' ] ) { // $value is an attachment. Add it to the document. if ( $ value instanceof \ SplFileInfo ) { $ document -> addFile ( $ key , $ value -> getPathName ( ) ) ; } else { $ document -> addFileContent ( $ key , $ value ) ; } continue ; } $ document -> set ( $ key , $ this -> normalizeValue ( $ value ) ) ; } if ( $ this -> dispatcher ) { $ event = new TransformEvent ( $ document , $ fields , $ object ) ; $ this -> dispatcher -> dispatch ( TransformEvent :: POST_TRANSFORM , $ event ) ; $ document = $ event -> getDocument ( ) ; } return $ document ; }
Transforms the given object to an elastica document.

@param object $object     the object to convert
@param array  $fields     the keys we want to have in the returned array
@param string $identifier the identifier for the new document

@return Document
Transforms the given object to an elastica document .