src/Model/Aggregate/AggregateRoot.php
protected function processEmbeddedEntityCommand(CommandInterface $command, array $custom_event_state = [])
    {
        $event_class = $command->getEventClass();
        $attribute_name = $command->getParentAttributeName();

        $event_state = [
            'parent_attribute_name' => $attribute_name,
            'embedded_entity_type' => $command->getEmbeddedEntityType()
        ];

        if ($command instanceof RemoveEmbeddedEntityCommand) {
            $event_state['embedded_entity_identifier'] = $command->getEmbeddedEntityIdentifier();
        } elseif ($command instanceof AddEmbeddedEntityCommand) {
            $create_data = $command->getValues();
            if (!isset($create_data['identifier'])) {
                $create_data['identifier'] = UuidAttribute::generateVersion4();
            }
            $event_state = array_merge(
                $event_state,
                [
                    'data' => $create_data,
                    'position' => $command->getPosition(),
                    'embedded_entity_identifier' => $create_data['identifier']
                ]
            );
        } elseif ($command instanceof ModifyEmbeddedEntityCommand) {
            $event_state = array_merge(
                $event_state,
                [
                    'data' => $command->getValues(),
                    'position' => $command->getPosition(),
                    'embedded_entity_identifier' => $command->getEmbeddedEntityIdentifier()
                ]
            );
        }
        $embedded_entity_events = new EmbeddedEntityEventList();
        foreach ($command->getEmbeddedEntityCommands() as $embedded_command) {
            $embedded_entity_events->push($this->processEmbeddedEntityCommand($embedded_command));
        }
        $event_state['embedded_entity_events'] = $embedded_entity_events;

        return new $event_class($event_state);
    }
protected function processEmbeddedEntityCommand(CommandInterface $command, array $custom_event_state = [])
    {
        $event_class = $command->getEventClass();
        $attribute_name = $command->getParentAttributeName();

        $event_state = [
            'parent_attribute_name' => $attribute_name,
            'embedded_entity_type' => $command->getEmbeddedEntityType()
        ];

        if ($command instanceof RemoveEmbeddedEntityCommand) {
            $event_state['embedded_entity_identifier'] = $command->getEmbeddedEntityIdentifier();
        } elseif ($command instanceof AddEmbeddedEntityCommand) {
            $create_data = $command->getValues();
            if (!isset($create_data['identifier'])) {
                $create_data['identifier'] = UuidAttribute::generateVersion4();
            }
            $event_state = array_merge(
                $event_state,
                [
                    'data' => $create_data,
                    'position' => $command->getPosition(),
                    'embedded_entity_identifier' => $create_data['identifier']
                ]
            );
        } elseif ($command instanceof ModifyEmbeddedEntityCommand) {
            $event_state = array_merge(
                $event_state,
                [
                    'data' => $command->getValues(),
                    'position' => $command->getPosition(),
                    'embedded_entity_identifier' => $command->getEmbeddedEntityIdentifier()
                ]
            );
        }
        $embedded_entity_events = new EmbeddedEntityEventList();
        foreach ($command->getEmbeddedEntityCommands() as $embedded_command) {
            $embedded_entity_events->push($this->processEmbeddedEntityCommand($embedded_command));
        }
        $event_state['embedded_entity_events'] = $embedded_entity_events;

        return new $event_class($event_state);
    }
protected function processEmbeddedEntityCommand ( CommandInterface $ command , array $ custom_event_state = [ ] ) { $ event_class = $ command -> getEventClass ( ) ; $ attribute_name = $ command -> getParentAttributeName ( ) ; $ event_state = [ 'parent_attribute_name' => $ attribute_name , 'embedded_entity_type' => $ command -> getEmbeddedEntityType ( ) ] ; if ( $ command instanceof RemoveEmbeddedEntityCommand ) { $ event_state [ 'embedded_entity_identifier' ] = $ command -> getEmbeddedEntityIdentifier ( ) ; } elseif ( $ command instanceof AddEmbeddedEntityCommand ) { $ create_data = $ command -> getValues ( ) ; if ( ! isset ( $ create_data [ 'identifier' ] ) ) { $ create_data [ 'identifier' ] = UuidAttribute :: generateVersion4 ( ) ; } $ event_state = array_merge ( $ event_state , [ 'data' => $ create_data , 'position' => $ command -> getPosition ( ) , 'embedded_entity_identifier' => $ create_data [ 'identifier' ] ] ) ; } elseif ( $ command instanceof ModifyEmbeddedEntityCommand ) { $ event_state = array_merge ( $ event_state , [ 'data' => $ command -> getValues ( ) , 'position' => $ command -> getPosition ( ) , 'embedded_entity_identifier' => $ command -> getEmbeddedEntityIdentifier ( ) ] ) ; } $ embedded_entity_events = new EmbeddedEntityEventList ( ) ; foreach ( $ command -> getEmbeddedEntityCommands ( ) as $ embedded_command ) { $ embedded_entity_events -> push ( $ this -> processEmbeddedEntityCommand ( $ embedded_command ) ) ; } $ event_state [ 'embedded_entity_events' ] = $ embedded_entity_events ; return new $ event_class ( $ event_state ) ; }
Process the given aggregate-command, hence build the corresponding aggregate-event.

@param CommandInterface $command
@param array $custom_event_state

@return EmbeddedEntityEventInterface
Process the given aggregate - command hence build the corresponding aggregate - event .