# SW 5.5.0 Beta - You have requested a non-existent service "shop"

**URL:** <https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194>\
**Category:** Programmierung\
**Created:** [30. Mai 2018 um 07:32 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194 "2018-05-30T07:32:35Z")\
**Posts on this page:** 20\
**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:** [30. Mai 2018 um 07:32 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/1 "2018-05-30T07:32:35Z")

</div>

Ich habe ein Plugin welches auf der neuen Shopware Version 5.5 nach dem Installieren einen Fehler verursacht. Es kann nicht mehr kompiliert werden.

Die Fehlermeldung lautet:&nbsp;_You have requested a non-existent service „shop“_

Der Fehler erscheint nicht, wenn im \_\_construct die Abfrage nach der Shop-ID für den Scobe entfernt wird:

&nbsp;

Aus diesem Code-Schnipsel

```
$shop = Shopware()->Shop();
$this->config = $configReader->getByPluginName($pluginName, $shop);

```

wird dann dies hier ohne Abfrage des Subshops:

```
$this->config = $configReader->getByPluginName($pluginName);

```

CODE:

**Subscriber/Subscriber.php**

```
pluginPath = $pluginPath;

		$shop = Shopware()->Shop();
		$this->config = $configReader->getByPluginName($pluginName, $shop);
	}

	public static function getSubscribedEvents()
	{
		return [
			'Theme_Inheritance_Template_Directories_Collected' => ['onTemplateDirectoriesCollect', -10],
			'Enlight_Controller_Action_PostDispatchSecure_Widgets_Emotion' => 'onFrontendPostDispatch',
			'Theme_Compiler_Collect_Plugin_Less' => 'onCollectLessFiles',
			'Theme_Compiler_Collect_Plugin_Javascript' => 'onCollectJsFiles'
		];
	}

	public function onTemplateDirectoriesCollect(EventArgs $args) {
		$dirs = $args->getReturn();

		$dirs[] = $this->pluginPath . '/Resources/views/';

		$args->setReturn( $dirs );
	}

	/**
	 * Provide the needed javascript files
	 *
	 * @return ArrayCollection
	 */
	public function onCollectJsFiles()
	{
		$jsFiles = [
			$this->pluginPath . '/Resources/views/frontend/_public/src/js/jquery.pluginname.js'
		];

		return new ArrayCollection($jsFiles);
	}

	/**
	 * @return ArrayCollection
	 */
	public function onCollectLessFiles()
	{

		$less = new LessDefinition(
			[
				'less-variable' => $this->config['lessVariable'],
			],
			[
				$this->pluginPath . '/Resources/views/frontend/_public/src/less/all.less',
			],
			$this->pluginPath
		);

		return new ArrayCollection([$less]);
	}

	public function onFrontendPostDispatch(EventArgs $args)
	{
		/** @var \Enlight_Controller_Action $controller */
		$controller = $args->get('subject');
		$view = $controller->View();

		$config = array(
			'configParameter' => $this->config['configParameter'],
		);

		$view->assign('prefixPluginName', $config)

	}
}

```

**Ressources/services.xml**

```
        %prefix_plugin_name.plugin_name%
        %prefix_plugin_name.plugin_dir%

```

&nbsp;

**Fehlermeldung beim Kompilieren**

```
Während der Bearbeitung von Shop "Demoshop" ist ein Fehler aufgetreten: You have requested a non-existent service "shop". Did you mean one of these: "customer_search.dbal.condition.ordered_in_shop_handler", "customer_search.dbal.condition.registered_in_shop_handler", "shop_page_menu", [...] "shopware_storefront.vote_hydrator_dbal", "shopware_storefront.vote_service", "shop"?

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Michael\_Telgmann](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michael_telgmann/32/20289_2.png) [@Michael\_Telgmann](https://forum.shopware.com/u/Michael_Telgmann)\
**Post date:** [30. Mai 2018 um 07:35 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/2 "2018-05-30T07:35:34Z")

</div>

Hallo,

vermutlich wird der Subscriber in einem Kontext aufgerufen, in dem es keine Shop Instanz gibt. Sprich Backend oder CLI.  
Das Problem ist, dass du direkt im Konstruktor versuchst auf das Shop Object zuzugreifen. Das funktioniert so nicht.&nbsp;

Viele Grüße aus Schöppingen

![cool](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "cool")&nbsp;Michael Telgmann

---

<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:** [30. Mai 2018 um 07:38 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/3 "2018-05-30T07:38:26Z")

</div>

Hallo [@Michael Telgmann]([http://forum.shopware.com/profile/17553/Michael](http://forum.shopware.com/profile/17553/Michael) Telgmann „Michael Telgmann“)‍

danke für den Hinweis. Ich rufe den \_\_construct() ja in der Subscriber/Subscriber.php auf. Wie kann ich das ändern? Sollte ich das nicht in der Subscriber/Subscriber.php machen?

---

<div class="post-metadata">

**Author:** ![Michael\_Telgmann](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michael_telgmann/32/20289_2.png) [@Michael\_Telgmann](https://forum.shopware.com/u/Michael_Telgmann)\
**Post date:** [30. Mai 2018 um 07:41 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/4 "2018-05-30T07:41:36Z")

</div>

Ich würde das Holen der Plugin Konfig in die Callback Methode des einen Events verschieben, in der es nur gebraucht wird.&nbsp;

Viele Grüße aus Schöppingen

![cool](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "cool")&nbsp;Michael Telgmann

---

<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:** [30. Mai 2018 um 07:46 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/5 "2018-05-30T07:46:03Z")

</div>

Du meinst also, ich soll&nbsp;

```
$shop = Shopware()->Shop();
$this->config = $configReader->getByPluginName($pluginName, $shop);

```

beispielsweise in die&nbsp;

```
 onTemplateDirectoriesCollect oder onFrontendPostDispatch

```

verschieben?

---

<div class="post-metadata">

**Author:** ![Michael\_Telgmann](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michael_telgmann/32/20289_2.png) [@Michael\_Telgmann](https://forum.shopware.com/u/Michael_Telgmann)\
**Post date:** [30. Mai 2018 um 07:51 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/6 "2018-05-30T07:51:22Z")

</div>

Genau. In „onFrontendPostDispatch“ wird das funktionieren. In der „onCollectLessFiles“ bin ich mir gerade nicht sicher, kannst du aber mal versuchen.&nbsp;

Viele Grüße aus Schöppingen

![cool](http://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/shopware.png "cool")&nbsp;Michael Telgmann

---

<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:** [30. Mai 2018 um 07:58 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/7 "2018-05-30T07:58:14Z")

</div>

Okay, ich bin leider in den Programmierungen nicht so fit… Frontend mit SMARTY, LESS und Co ist eher mein Gebiet…

Ich habe den ganzen Kram ja jetzt im \_\_construct drin… und leider keine Ahnung, wie ich das nun in die onFrontendPostDispatch bekommen soll…&nbsp;

---

<div class="post-metadata">

**Author:** ![BestShopPossible](https://avatars.discourse-cdn.com/v4/letter/b/6bbea6/32.png) [@BestShopPossible](https://forum.shopware.com/u/BestShopPossible)\
**Post date:** [30. Mai 2018 um 09:15 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/8 "2018-05-30T09:15:31Z")

</div>

strg+x und dann strg+v und testen ob es geht wäre mal ein Anfang

---

<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:** [30. Mai 2018 um 09:53 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/9 "2018-05-30T09:53:45Z")

</div>

@BestShopPossible‍

ich verstehs glaube nicht ganz…&nbsp;

```
$shop = Shopware()->Shop();
$this->config = $configReader->getByPluginName($pluginName, $shop);

```

kann ich nicht einfach verschieben… ich referenziere da ja auf Variablen usw. die im \_\_construct geholt werden. Den ganzen \_\_construct kann ich doch auch nicht einfach verschieben… ich peils nicht…&nbsp; ![Undecided](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/undecided.png "Undecided")

```
    /**
	 * @var
	 */
	private $pluginPath;

	/**
	 * @var
	 */
	private $config;

	public function __construct($pluginName, $pluginPath, CachedConfigReader $configReader)
	{
		$this->pluginPath = $pluginPath;

		$shop = Shopware()->Shop();
		$this->config = $configReader->getByPluginName($pluginName, $shop);
	}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [30. Mai 2018 um 10:48 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/10 "2018-05-30T10:48:27Z")

</div>

Dein subscriber (und damit der constructor) wird -immer- geladen - egal ob du dich im frontend, backend oder cronjob Kontext befindest. Da es im backend keinen Shop gibt, wird dieser Fehler geworfen. Also solltest du das Auslesen der Konfiguration erst in der listener Methode machen.

Viele Grüße  
[https://www.digitvision.de](https://www.digitvision.de)

---

<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:** [30. Mai 2018 um 11:32 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/11 "2018-05-30T11:32:03Z")

</div>

Okay. Also ist das Beispiel hier: [Plugin quick Startup Guide](https://developers.shopware.com/developers-guide/plugin-quick-start/?&_ga=2.37836650.817698121.1527489250-1386687580.1527146725#subscriber-classes)

nicht direkt um das Auslesen von Subshop-Konfigurationen erweiterbar und müsste entsprechend komplett umgebaut werden?! Weil nach diesem Vorbild habe ich es gemacht…

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [30. Mai 2018 um 11:34 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/12 "2018-05-30T11:34:35Z")

</div>

Der Unterschied ist, dass du die Konfiguration mit dem aktuellen Shop als Kontext auslesen möchtest.  
Bitte vergleich doch die beiden constructors mal genauer.

Viele Grüße  
[https://www.digitvision.de](https://www.digitvision.de)

---

<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:** [30. Mai 2018 um 11:40 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/13 "2018-05-30T11:40:33Z")

</div>

Ja genau, ich will ja, dass ein möglicher Subshop eine andere Konfiguration haben kann und habe diese Vorlage entsprechend um den weiteren Paramter in getByPluginName() erweitert und versuche dann Shopware()-\>Shop(); auszulesen, was aber wohl nicht passieren darf.

Das meinst Du doch, oder?

Wie müsste denn das Beispiel aus [Plugin quick Startup Guide](https://developers.shopware.com/developers-guide/plugin-quick-start/?&_ga=2.37836650.817698121.1527489250-1386687580.1527146725#subscriber-classes) aussehen, damit man dort auch subshop-spezifisch die Konfiguration auslesen kann?

&nbsp;

---

<div class="post-metadata">

**Author:** ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)\
**Post date:** [30. Mai 2018 um 12:37 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/14 "2018-05-30T12:37:48Z")

</div>

Und warum die Config im Constructor auslesen und als Var zwischenspeichern?  
Ich würde einfach bei Bedarf zur Laufzeit aus dem Event heraus die Config auslesen - und nicht IMMER im Constructor - unnötiger Overhead.

---

<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:** [30. Mai 2018 um 12:44 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/15 "2018-05-30T12:44:43Z")

</div>

&nbsp;

- Die **services.xml** habe ich nun um

und

```
%prefix_plugin_name.plugin_name%

```

gekürzt.

```
;

    
        
        %prefix_plugin_name.plugin_dir%

```

- Den **Constructor** habe ich nun radikal gekürzt…

&nbsp;

&nbsp;\*\*onCollectLessFiles (\*\*Theme\_Compiler\_Collect\_Plugin\_Less) habe ich um **$this-\>config = Shopware()-\>Container()-\>get(‚shopware.plugin.cached\_config\_reader‘)-\>getByPluginName(‚pluginName‘);** erweitert.

```
/**
 * @return ArrayCollection
 */
public function onCollectLessFiles()
{

	$this->config = Shopware()->Container()->get('shopware.plugin.cached_config_reader')->getByPluginName('pluginName');

	$less = new LessDefinition(
		[
			'less-variable' => $this->config['lessVariable'],
		],
		[
			$this->pluginPath . '/Resources/views/frontend/_public/src/less/all.less',
		],
		$this->pluginPath
	);

	return new ArrayCollection([$less]);
}

```

&nbsp;

onFrontendPostDispatch (Enlight\_Controller\_Action\_PostDispatchSecure\_Widgets\_Emotion) habe ich um **$shop = Shopware()-\>Shop();  
&nbsp;&nbsp; &nbsp;$this-\>config = Shopware()-\>Container()-\>get(‚shopware.plugin.cached\_config\_reader‘)-\>getByPluginName(‚pluginName‘, $shop );** erweitert

```
public function onFrontendPostDispatch(EventArgs $args)
{
	/** @var \Enlight_Controller_Action $controller */
	$controller = $args->get('subject');
	$view = $controller->View();

	$shop = Shopware()->Shop();
	$this->config = Shopware()->Container()->get('shopware.plugin.cached_config_reader')->getByPluginName('pluginName', $shop );

	$config = array(
		'smartyVariable' => $this->config['configParameter'],
	);

	$view->assign('pluginName', $config);

}

```

&nbsp;

&nbsp;

FRAGEN: Benötige ich bei den LESS-Variablen keinen Shop-Kontext? Wenn ich hier Shopware()-\>Shop() abfrage erscheint wieder der Fehler…

---

<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:** [30. Mai 2018 um 12:56 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/16 "2018-05-30T12:56:42Z")

</div>

> [@sonic schrieb:](https://forum.shopware.com/profile/16285/sonic "sonic")
> 
> Und warum die Config im Constructor auslesen und als Var zwischenspeichern?  
> Ich würde einfach bei Bedarf zur Laufzeit aus dem Event heraus die Config auslesen - und nicht IMMER im Constructor - unnötiger Overhead.

Also ist die Doku nicht „best-practice“? ( [https://developers.shopware.com/developers-guide/plugin-quick-start/?&\_ga=2.37836650.817698121.1527489250-1386687580.1527146725#subscriber-classes](https://developers.shopware.com/developers-guide/plugin-quick-start/?&_ga=2.37836650.817698121.1527489250-1386687580.1527146725#subscriber-classes) )

---

<div class="post-metadata">

**Author:** ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)\
**Post date:** [30. Mai 2018 um 13:04 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/17 "2018-05-30T13:04:32Z")

</div>

Im Beispiel wird aber die allgemeine Config gelesen, und eben **nicht** die aus einem Shop-Context.  
Sobald etwas ausserhalb vom Shopcontext läuft - also z.B. Backend - gibt es eben auch keinen Shop-Context. Wo soll der denn herkommen???  
“onCollectLessFiles()” (kenn ich grad nicht) dürfte ja wohl nur in Frage kommen, wenn ein Theme compiliert wird. Da dürfte es aber gar keinen Shop-Context geben, eher wird es wohl ein Argument geben, welches Verweise auf das zu kompilierende Theme und den dazu gehörigen Shop hat. Aber das ist bestimmt kein klassicher “Shopcontext” - weil es ja dort nicht in einem “Shop” abläuft.

Guck mal hier:  
[shopware/LessCollector.php at 5.4 · shopware/shopware · GitHub](https://github.com/shopware/shopware/blob/5.4/engine/Shopware/Components/Theme/LessCollector.php#L199)  
Wenn ich jetzt auf die Schnelle richtig bin, bekommt “onCollectLessFiles” den Shop als Parameter übergeben.

---

<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:** [30. Mai 2018 um 13:15 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/18 "2018-05-30T13:15:28Z")

</div>

Okay, also muss ich es da nicht explizit selbst übergeben ?!

&nbsp;

Ich sehe es immer wieder in anderen Plugins, dass in der onCollectLessFiles der Shop mit Shopware()-\>Shop() übergeben wird. Das knallt auch bei anderen… das ist wohl neu in der 5.5

---

<div class="post-metadata">

**Author:** ![Michael\_Telgmann](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/michael_telgmann/32/20289_2.png) [@Michael\_Telgmann](https://forum.shopware.com/u/Michael_Telgmann)\
**Post date:** [30. Mai 2018 um 13:18 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/19 "2018-05-30T13:18:36Z")

</div>

Du kannst dir aus dem EventParameter das Shop Objekt holen und dieses dann für das Holen der Konfig nutzen.&nbsp;

Viele Grüße aus Schöppingen

![cool](http://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/shopware.png "cool")&nbsp;Michael Telgmann

---

<div class="post-metadata">

**Author:** ![sonic](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sonic/32/25728_2.png) [@sonic](https://forum.shopware.com/u/sonic)\
**Post date:** [30. Mai 2018 um 13:20 UTC](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194/20 "2018-05-30T13:20:01Z")

</div>

Ich weiß nicht, ob Du meinen Nachtrag schon gelesen hattest 😉  
Also:  
**Wenn** ich richtig liege, wird&nbsp;onCollectLessFiles() zwei "Array"s übergeben - die müsstest Du also dann in der Function ergänzen.  
Das erste „Array“ - genauer&nbsp;ArrayCollection - wäre für die Rückgabe aus dem Plugin und im zweiten Array müsste dann ein index „shop“ sein, der eben auf den Shop verweist.  
Denn könntest Du dann testweise an den Config-Reader übergeben.

[Nächste Seite](https://forum.shopware.com/t/sw-5-5-0-beta-you-have-requested-a-non-existent-service-shop/53194.md?page=2)
