# Einkaufswelten Export / Import Handler - ComponentHandlerInterface wirft Fehler

**URL:** https://forum.shopware.com/t/einkaufswelten-export-import-handler-componenthandlerinterface-wirft-fehler/50485
**Category:** Programmierung
**Created:** [16. Januar 2018 um 14:51 UTC](https://forum.shopware.com/t/einkaufswelten-export-import-handler-componenthandlerinterface-wirft-fehler/50485 "2018-01-16T14:51:14Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)
#### Post date: [16. Januar 2018 um 14:51 UTC](https://forum.shopware.com/t/einkaufswelten-export-import-handler-componenthandlerinterface-wirft-fehler/50485/1 "2018-01-16T14:51:14Z")

</div>

Hallo, versuche gerade für ein Einkaufswelten-Element einen eigenen Handler für Import und Export zu schreiben. Im Grund unterscheidet sich das Element kaum vom Banner. Ich arbeite nach der Doku:&nbsp;[Custom shopping world elements](https://developers.shopware.com/developers-guide/custom-shopping-world-elements/#adding-a-custom-component-handler-for-export)

Leider erhalte ich folgender Fehelrmeldung beim Export:&nbsp;&nbsp;

```
Fatal error: Uncaught Error: Call to a member function getRepository() on null in /home/vagrant/www/shopware/custom/plugins/prefixMyElement/Components/Emotion/Preset/ComponentHandler/MyElementComponentHandler.php on line 136

processElementData($element, $syncData);
	}

	/**
	 * {@inheritdoc}
	 */
	public function export(array $element, ParameterBag $syncData)
	{
		if (!isset($element['data'])) {
			return $element;
		}

		return $this->prepareElementExport($element, $syncData);
	}

	/**
	 * @param array $element
	 * @param ParameterBag $syncData
	 *
	 * @return array
	 */
	private function processElementData(array $element, ParameterBag $syncData)
	{
		$data = $element['data'];
		$assets = $syncData->get('assets', []); // Contains info about the assets like actual path
		$importedAssets = $syncData->get('importedAssets', []); // Contains info about already imported assets

		foreach ($data as &$elementData) {
			if ($elementData['key'] === self::ELEMENT_DATA_KEY) {
				if (!array_key_exists($elementData['value'], $assets)) {
					break;
				}
				if (!array_key_exists($elementData['value'], $importedAssets)) { // Already imported?
					$assetPath = $assets[$elementData['value']];

					$media = $this->doAssetImport($assetPath); // Import new/unknown asset
					$importedAssets[$elementData['value']] = $media->getId();
				} else {
					$media = $this->getMediaById($importedAssets[$elementData['value']]); // Gather info about already imported asset
				}

				$elementData['value'] = $media->getPath(); // Set the asset path as value on element data

				break;
			}
		}
		unset($elementData);

		$syncData->set('importedAssets', $importedAssets); // Store info about handled asset imports
		$element['data'] = $data;

		return $element; // Return processed element
	}

	/**
	 * @param array $element
	 * @param ParameterBag $syncData
	 *
	 * @return array
	 */
	private function prepareElementExport(array $element, ParameterBag $syncData)
	{
		$assets = $syncData->get('assets', []);
		$data = $element['data'];

		foreach ($data as &$elementData) {
			if ($elementData['key'] === self::ELEMENT_DATA_KEY) {
				$assetPath = $elementData['value'];
				$media = $this->getMediaByPath($assetPath);

				if ($media) {
					$assetHash = md5($media->getId()); // Create hash as unique identifier
					$assets[$assetHash] = $this->mediaService->getUrl($assetPath);
					$elementData['value'] = $assetHash; // Save hash as value

					break;
				}
			}
		}
		unset($elementData);

		$syncData->set('assets', $assets); // Store asset info globally
		$element['data'] = $data;

		return $element;
	}

	/**
	 * @param int $id
	 *
	 * @return null|Media
	 */
	private function getMediaById($id)
	{
		return $this->mediaResource->getRepository()->find($id);
	}

	/**
	 * @param string $path
	 *
	 * @return null|Media
	 */
	private function getMediaByPath($path)
	{
		return $this->mediaResource->getRepository()->findOneBy(['path' => $path]);
	}
}

```

&nbsp;

&nbsp;

&nbsp;

---

<div class="post-metadata">

### Author: ![Vincentthe0ne](https://avatars.discourse-cdn.com/v4/letter/v/b4bc9f/32.png) [@Vincentthe0ne](https://forum.shopware.com/u/Vincentthe0ne)
#### Post date: [23. September 2019 um 13:31 UTC](https://forum.shopware.com/t/einkaufswelten-export-import-handler-componenthandlerinterface-wirft-fehler/50485/2 "2019-09-23T13:31:15Z")

</div>

Wo definierst du denn eigentlich deine mediaResource?&nbsp;

Anscheinend hast du Funktionen des AbstractComponentHandlers in deinen eigenen Handler kopiert. Hätte es theoretisch nicht gereicht den AbstractComponentHandler zu erweitern?
