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

Wenn das die Funktion ist, wie würde das aussehen? Ich bin leider gar nicht gut in php bzw. den Backend Frameworks… wie eingangs erwähnt bin ich in der Regel nur im Frontend (Smarty, Less und Co.) unterwegs, muss aber leider das mit der Plugin-Struktur auf die Kette bringen  Foot-in-Mouth

/**
 * @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]);
}

 

Eigentlich bin ich grad nicht am Computer und mach was ganz Anderes - drum zwischen den Tasks: Ich weiß auch nicht wirklich, ob ich in „CollectLess Files“ Variablen definieren kann - hab mich mit dem Collector noch nicht beschäftigen müssen  Wink
Wenn Du wirklich den Shop-„Context“ benötigst, probier es mal so:

public function onCollectLessFiles(Enlight_Event_EventArgs $args){
 $this->config = Shopware()->Container()->get('shopware.plugin.cached_config_reader')->getByPluginName('pluginName', $args['shop']);
....
}

 

Nachtrag:
Ob Du den Shop-Context benötigst, hängt davon ab, wie Du in der config.xml das Element definiert hast. Nur wenn dort scope=„shop“  definiert ist, benötigst Du den „Shop“, sonst geht auch der Config-Reader ohne Shop, da das Plugin dann keine Shop-speziefische Config für die Variable hat.

1 „Gefällt mir“

in der alten Plugin-Struktur lief das so:

$shop = $args->getShop();
$config = $this->collection->getConfig($this->name,$shop);

ich teste das nachher mal wie oben

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

 

Ja, so geht es auch, wenn Du aus einem Frontend- oder Widget-Controller - also Shop - heraus auf die Config zugreifen möchtest. Aber der Compiler ist nunmal kein Frontend-Controller, und somit hat der Fall „onCollectLessFiles“ eben keinen Shop-Context  Wink
Mache ich was z.B. in einem „Enlight_Controller_Action_PostDispatchSecure_Frontend“, so geht das so:
(aus meinem "Ich baller alles vom Newsletter weg Plugin)

private function getConfiguration() {
/** return Plugin-Configuration from current shop */
 return $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName($this->getName(), $this->container->get('Shop'));
}

 

Ich verwende für onCollectLessFiles Files nun: 

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

und onFrontendPostDispatch :

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

 

Das habe ich nun in einem Subshop getestet und es funktioniert. Bei Sprachshops greifen die LESS-Variablen nicht, was aber bekannt ist, da der Sprachshop ja auch kein eigenes Theme bekommt. 

So 100% bin ich mit dem __get() noch nicht auf „Du“ - für einen Key im Array muss man doch GROß/klein-Schreibung beachten. Der __get benutzt den Namen ja auch nur als key.
Im Core verwendet Shopware an der Stelle den Key „shop“ - würde aus getShop() nicht „Shop“ als Key werden? Shop != shop => immer NULL?
Da brauch ich jetzt mal Nachhilfe  Wink

@sonic‍ shopware/ArrayCollection.php at 59024d2a7d6982390e42759dae9d052b30a02a55 · shopware/shopware · GitHub deshalb klappt es :slight_smile:

1 „Gefällt mir“

*Boa* - einfach ein paar Zeilen runterscrollen… war nur bis zum _get gekommen  Wearing-Sunglasses Besten Dank!  Thumb-Up

Ich habe dieses Fehler bei “Theme kompilierung”  in “Theme Manager” wenn ich “Theme zuweisen” klicke.

Deshalb die Fehler ist nicht aus dem Grund von Plugins. Oder?