Hi zusammen, Achtung: wir sind total zufrieden mit der Erweiterbarkeit und mit Shopware insgesamt. Uns fällt durch unser CI und durch die generierten Quality Reports nur immer wieder auf, dass Shopware an ein paar Stellen anders tickt, als es der PHP-Standard und die von Shopware selbst ausgegebenen Coding Standards empfehlen. So werden beispielsweise Controller-Namen wie folgt gefordert: class Shopware\_Controllers\_Frontend\_MyControllerName extends Enlight\_Controller\_Action { //... }
Kein Namespace (und logischerweise kein korrespondierendes Directory), Underscores (_) - so nicht optimal. Warum dass gefordert wird ist nachvollziehbar - im Default-Dispatcher wird die Klasse zum Controller “hart” verdrahtet: public function getControllerClass(Enlight\_Controller\_Request\_Request $request) { if (!$request-\>getControllerName()) { $request-\>setControllerName($this-\>defaultController); } if (!$request-\>getModuleName()) { $request-\>setModuleName($this-\>defaultModule); } $module = $request-\>getModuleName(); $this-\>curModule = $module; $this-\>curDirectory = $this-\>getControllerDirectory($module); $moduleName = $this-\>formatModuleName($module); $controllerName = $this-\>formatControllerName($request-\>getControllerName()); $class = array(Enlight\_Application::Instance()-\>App(), 'Controllers', $moduleName, $controllerName); $class = implode('\_', $class); return $class; }
Interessant wäre, was passiert, wenn es aus zwei Plugins zwei Controller mit selbem Namen gibt. Da kein Namespace im Spiel ist, dürfte das kompliziert werden. Anderes Beispiel: Bei Backend-Plugins wird für Models gefordert, dass diese in einem Namespace “CustomModels” liegen, das Verzeichnis soll aber “Models” heißen. Auch dies geht nicht mit den Shopware-Coding-Stanards konform. Mir ist sehr wohl klar, dass das keine dringlichen Probleme sind sondern höchstens Schönheitsfehler. Im Sinne von Stringenz und Einheitlichkeit könnte man ja mittelfristig drüber nachdenken.
Hallo, im großen und ganzen kann ich dir da völlig Recht geben. Wir versuchen uns so weit wie möglich an die etablierten Coding Style Standards PSR-1 sowie PSR-2 zu halten. Aus “historischen” / pre PHP 5.3 Gründen haben die alten Klassen noch keine Namespaces und halten sich nicht immer an die modernen Coding Styles. Aus Gründen der Rückwärtskompatibilität ist es nicht immer leicht Klassen umzubenennen. Neuer Code den wir schreiben folgt allerdings fast immer diesen neuen Coding Styles. Siehe dazu z.B die neuen Bundles: https://github.com/shopware/shopware/tr … are/Bundle Zur gegebener Zeit werden wir natürlich auch diese alten Klassen/Controller überarbeiten und durch aktuelle Namensschema sowie Coding Styles ersetzen. Viele Grüße, Benjamin Cremer :shopware: