5.2 Pluginstruktur - service.xml erzeugt Fehler 500 - Frontend und Backend werden nicht angezeigt

Hallo zusammen,

ich taste mich gerade an die neuen Plugin-Struktur heran.

Dabei habe ich folgende Struktur:

_prefixPluginName
    |__ Resources
        – config.xml
        – services.xml
    |__ Subscriber
        – TestSubscriber.php
    – plugin.png
    – plugin.xml
    – prefixPluginName.php

 

Resources/services.xml - Zeile <tag …> erzeugt einen Fehler, sodass weder Backend noch Frontend geladen werden.

Subscriber/SubscriberDatei.php

 'extendsFrontend',
			'Theme_Compiler_Collect_Plugin_Less' => 'onCollectLessFiles',
			'Theme_Compiler_Collect_Plugin_Javascript' => 'onCollectJsFiles'
		];
	}

	public function extendsFrontend(\Enlight_Event_EventArgs $args)
	{
		/** @var Enlight_Template_Manager $view */
		$view = $args->getSubject()->View();
		$view->addTemplateDir($this->getPath() . '/Resources/Views');

		$configReader = $this->container->get('shopware.plugin.config_reader');
		$pluginConfig = $configReader->getByPluginName($this->getName());

		
	}
}

 

Ich habe die service.xml anhand der Shopware Doku erstellt.

Bin mir aber nicht ganz im klaren, was ich da eigentlich mache… Gibt es dazu irgendwie noch weitere Dokumentationen?

Was gebe ich bei id ein, was bei den arguments usw. ? phpStorm hat mir die class immerhin verknüpft, sodass ich der Meinung bin, dass dies stimmen sollte.
 

 

Was steht denn im error.log ?

Oh, da hab ich noch gar nicht hineingeschaut, weil ich ich bei einem php-Fehler nicht davon ausgegangen bin, dass dort mehr drin stehen würde als in der Konsole.
Das muss ich nachreichen.

Hallo @IFF‍

anbei die Fehlermeldung: Fatal error: Uncaught ReflectionException: Class prefixPluginName\Subscriber\TestSubscriber does not exist in /home/vagrant/www/sw-plugins/engine/Shopware/Components/DependencyInjection/Compiler/EventSubscriberCompilerPass.php on line 64

 

Class prefixPluginName\Subscriber\TestSubscriber does not exist

Nun ja, der Fehler steht da :slight_smile:

Verstehe ich die Service.xml dann irgendwie falsch? Woher kann ich wissen was für id, class, arguments und co eingetragen werden soll?! Da geht aus der Doku nicht hervor…

Dachte halt es stimmt so, da ein Klick in phpStorm auf die class prefixPluginName\Subscriber\TestSubscriber mich zu Subscriber/SubscriberDatei.php führt… und in der Doku und Plugins, die ich mir angesehen habe, ist es auch so…

Hallo zusammen,

die services.xml Datei wird für eine Symfony Komponente gebraucht, die wir in Shopware benutzen: den Service-Container. Daher würde ich zuerst dir die Symfony Doku empfehlen. http://symfony.com/doc/2.8/service_container.html (achte darauf, dass du die richtige Smyfony Version wählst 2.8  und außerdem die XML Beispiele) 

Wenn du nun dir einen eigenen Service definierst, oder eben einen neuen Subscriber, kannst du dir die ID selber aussuchen. Bei class muss natürlich der Klassenname inkl. Namespace eingetragen werden. Der tag definiert in deinem Beispiel, dass es sich um einen Event-Subscriber handelt. 
Arguments sind Abhängigkeiten deiner Klasse, die du im Konstruktur deines Services definierst. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 „Gefällt mir“

Okay, ich komme eigentlich aus der Frontend-Welt (HTML, CSS, LESS, jQuery, Smarty und Co.) daher sind symphony, doctrine und co. komplettes Neuland für mich. Habe in der Regel damit auch sehr wenig Berührungspunkte - in diesem Fall eben schon.

Die ID habe ich mir auch frei ausgesucht. Die CLASS verweist aber (meiner Meinung nach) auf die korrekte Datei mit korrekter Klasse und korrektem Namespace. Sieht phpStorm doch auch so, oder würde er mich sonst auch in der service.xml mit Klick auf die Klasse auf die richtige Datei weisen? Woher dann der Fehler? Übersehe ich etwas?

Hier nochmal die relevanten Code-Zeilen:

service.xml

Subscriber/SubscriberDatei.php

 

wie sieht denn deine ‘prefixPluginName.php’ Datei aus?

Viele Grüße aus Schöppingen

cool Michael Telgmann

 Im Grunde ziemlich leer :wink:

 

Hallo,

ich habe mal folgendes bei mir ausprobiert:

prefixPluginName
    |__ Resources
        – services.xml
    |__ Subscriber
        – TestSubscriber.php
    – prefixPluginName.php

Folgende Inhalte:
prefixPluginName.php

services.xml

TestSubscriber.php

 'extendsFrontend',
        ];
    }

    public function extendsFrontend(\Enlight_Event_EventArgs $args)
    {
        echo '';
        print_r("hallo");
        echo '';
        exit();
    }
}

Funktioniert bei mir tadelos. An welcher Stelle genau, tritt denn dein Problem auf? Hast du den kompletten Cache einmal geleert, nach der Installation?

Viele Grüße aus Schöppingen

cool Michael Telgmann

Nach der Installation kann ich keinen Cache mehr leeren, da weder Frontend noch Backend angezeigt werden. Ich werde nochmals alle Dateien prüfen.

Hi,

du kannst den Cache per CLI Command löschen. Außerdem empfehle ich dir folgenden Link zu beachten und einzubauen: http://community.shopware.com/Fehlermeldungen-in-Shopware-debuggen_detail_1880.html#Frontend_Error_Reporter
Dadurch siehst du direkt die PHP Fehler die auftreten.

Viele Grüße aus Schöppingen

cool Michael Telgmann

Ich kann meinen Fehler nicht finden. Letztlich habe ich alles neu gemacht. Im phpStorm hatte sich auch das Fileicon meines Subscribers nicht von dem php-Fileicon zum c-icon gewechselt. Irgendwas muss da nicht gepasst haben. Ich habe es einfach nochmal nachgebaut und bekomme jetzt keinen Fehler mehr.