formFactory = $formFactory; $this->customerFactory = $customerFactory; $this->storeManager = $storeManager; $this->customerGroupManagement = $customerGroupManagement; $this->dataObjectHelper = $dataObjectHelper; } /** * Creates a Customer object populated with the given form code and request data. * * @param string $formCode * @param RequestInterface $request * @param array $attributeValues * @return CustomerInterface */ public function extract( $formCode, RequestInterface $request, array $attributeValues = [] ) { $customerForm = $this->formFactory->create( CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, $formCode, $attributeValues ); $customerData = $customerForm->extractData($request); $customerData = $customerForm->compactData($customerData); $allowedAttributes = $customerForm->getAllowedAttributes(); $isGroupIdEmpty = !isset($allowedAttributes['group_id']); $customerDataObject = $this->customerFactory->create(); $this->dataObjectHelper->populateWithArray( $customerDataObject, $customerData, \Magento\Customer\Api\Data\CustomerInterface::class ); $store = $this->storeManager->getStore(); $storeId = $store->getId(); if ($isGroupIdEmpty) { $groupId = isset($customerData['group_id']) ? $customerData['group_id'] : $this->customerGroupManagement->getDefaultGroup($storeId)->getId(); $customerDataObject->setGroupId( $groupId ); } $customerDataObject->setWebsiteId($store->getWebsiteId()); $customerDataObject->setStoreId($storeId); return $customerDataObject; } }