Hallo @ All, ich muss in der Datei /GXEngine/Classes/CoreServices/Customer/CustomerInputValidator.inc.php etwas anpassen, dazu habe ich zwei Fragen. 1. Lässt sich die Datei überladen? 2. Wenn 1. ja, wie muss der Ordner heißen in user_classes/overloads wo die Datei rein muss? Beispiel entweder /CustomerInputValidator/ oder /CustomerInputValidatorInterface/ oder vielleicht ganz anders?
Das hat ja super funktioniert, dennoch habe ich noch nicht begriffen, wie ich an die Klassen komme, die von dir, funktioniert, steht aber nirgends in der Datei. Vielleicht kannst du mir mal erklären wie sich das zusammen setzt, ich stehe da wie der Ochs vorm Tor und begreife das einfach nicht.
"CustomerRegistrationInputValidatorService" ist der Ordner den du unter "user_classes/overloads/" erstellst. In diesem Ordner erstellst du eine Datei und bennenst diese nach Wunsch. In dieser Datei fügst du nun die Methode ein, die du überladen möchtest. Beispiel: PHP: protected function _validateDataByArray(array $inputArray){[...]$this->validateFirstname($inputArray['firstname']); // Möchtest du überladen[...]} Also lässt du den Eintrag "$this->validateFirstname($inputArray['firstname']);" weg und erstellst deine eigene Logik oder erzeugst gleiche Methode. Beispiel: PHP: protected function _validateDataByArray(array $inputArray){[...]$this->validateFirstname($inputArray['firstname']); // Möchtest du überladen[...]}protected function validateFirstname($input){ // deine Logik} "CustomerInputValidator" wird in "CustomerRegistrationInputValidatorService" geladen... So kommst du an "CustomerInputValidator" "CustomerInputValidator" -> Mutterklasse "CustomerRegistrationInputValidatorService" -> Kindklasse Die Kindklasse erbt Eigenschaften und Methoden der Mutterklasse. Vergleichbar mit einer Klasse die "extended" wird, wo du dessen Methode in der Kindklasse überläds
Hallo Menovo, das ist mir klar, nur weiß ich immer nicht wie der Ordner heißen muss, wenn ich mir die ganzen Erklärungen so durchlese, sollte der Ordner eigentlich "CustomerInputValidator" heißen, deswegen verstehe ich nicht wie so der "CustomerRegistrationInputValidatorService" heißen muss.
Weil "CustomerInputValidator" durch den "MainFactory" zwar in "CustomerRegistrationInputValidatorService" geladen aber nicht "erzeugt" wird. Du kannst nur Klassen direkt überladen, die auch durch den "MainFactory" erstellt/erzeugt werden. Zitat: " Welche Klassen können überladen werden? Es können alle Klassen überladen werden, die durch die MainFactory erzeugt werden. Dies deckt nahezu alle Klassen ab. Die überladbaren Klassen liegen in folgenden Verzeichnissen inklusive ihrer Unterverzeichnisse: admin/gm/classes admin/includes/classes gm/classes GXEngine includes/classes (außer includes/classes/scssphp) includes/modules/order_total includes/modules/payment includes/modules/shipping system/classes system/core system/extender system/overloads Ausgenommen sind Klassen, die nur zur Typ-Validierung (TypeHints) genutzt werden und daher nicht über die MainFactory erzeugt werden. Diese Klassen liegen im Verzeichnis GXEngine/Classes/Shared/Types. Besonders erwähnenswert sind die (Link nur für registrierte Nutzer sichtbar.), die durch Class-Overloading genutzt werden können. Standardmäßig werden Beispiel-Overloads ausgeliefert, die die Funktionalität veranschaulichen. Diese sind im Verzeichnisuser_classes/overloads/_samples zu finden. Sie können aktiviert werden, indem der jeweilige Ordner eine Ebene nach oben verschoben wird. "