Problem mit eigenem Modul nach Migration auf 6.0.4

Guten Abend,

ich habe am vergangenen Freitag von Oxid 4.10.8 auf 6.0.4 migriert.
So weit hat alles gut funktioniert.

Ich habe jetzt jedoch mit einem eigenen Modul Probleme, welches unter 4.10.8 noch lief.
Das Modul habe ich gemäß der Entwicklerdoku angepasst.
Das Modul überlädt die Methode “createUser()” der Klasse UserComponent.php.
Folgende Coezeile wurde angepasst:
Original:

//if ($blOptin && $iSubscriptionStatus == 1) {

Angepasst:

if ($iSubscriptionStatus == 1) {

Wenn das Modul aktiv ist und ich versuche ein neues Kundenkonto zu eröffnen, werde ich zurück auf die Startseite geleitet.
In der Datei oxideshop.log befinden sich die folgenden Einträge:

[2019-07-02 22:43:33] OXID Logger.ERROR: EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND userupdatablefields ["[object] (OxidEsales\Eshop\Core\Exception\SystemComponentException(code: 0): EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND userupdatablefields at /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php:222)\n[stacktrace]\n#0 /opt/lampp/htdocs/oxid6/source/oxfunctions.php(101): OxidEsales\EshopCommunity\Core\UtilsObject->oxNew(‘userupdatablefi…’)\n#1 /opt/lampp/htdocs/oxid6/source/modules/custom/bugfixes/Application/Component/myModule_UserComponent.php(48): oxNew(‘UserUpdatableFi…’)\n#2 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(524): myModule_UserComponent->createUser()\n#3 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/FrontendController.php(543): OxidEsales\EshopCommunity\Core\Controller\BaseController->executeFunction(‘createuser’)\n#4 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(382): OxidEsales\EshopCommunity\Application\Controller\FrontendController->init()\n#5 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(272): OxidEsales\EshopCommunity\Core\ShopControl->_initializeViewObject(‘OxidEsales\\Esho…’, ‘createuser’, NULL, NULL)\n#6 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): OxidEsales\EshopCommunity\Core\ShopControl->_process(‘OxidEsales\\Esho…’, ‘createuser’, NULL, NULL)\n#7 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()\n#8 /opt/lampp/htdocs/oxid6/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()\n#9 {main}\n"] []

Die folgende Codezeile in der Methode createUser() scheint der Fehler zu verursachen:

$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(UserUpdatableFields::class));

Hat jemand eine Idee, wo das Problem liegen könnte?
Die Klasse “UserUpdatableFields” habe ich nicht angefasst.

Viele Grüße und besten Dank!

Hi,

steht denn in deiner Datei nach namespace …;
use OxidEsales\Eshop\Application\Model\User\UserUpdatableFields; ?

Alternativ direkt die betreffende Zeile:
$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(\OxidEsales\Eshop\Application\Model\User\UserUpdatableFields::class));

Danke für die Rückmeldung.

Ja, diese Zeile ist vorhanden. Allerdings nicht in meinem eigenen Modul, sondern in der Originaldatei UserComponent.php.
In meinem Modul befindet sich aussschließlich die überladene Methode CreateUser().

Wenn ich den Pfad zu der Klasse direkt angebe, werde ich nach wie vor auf die Startseite umgeleitet bei Eröffnung eines Kundenkontos, die Fehlermeldung ändert sich jedoch:

[2019-07-03 08:49:17] OXID Logger.ERROR: Function ‘cleanAddress’ does not exist or is not accessible! (myModule_UserComponent)
["[object] (OxidEsales\Eshop\Core\Exception\SystemComponentException(code: 0): Function ‘cleanAddress’ does not exist or is not accessible! (myModule_UserComponent)\n at /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Base.php:76)\n[stacktrace]\n#0 /opt/lampp/htdocs/oxid6/source/modules/custom/bugfixes/Application/Component/myModule_UserComponent.php(48): OxidEsales\EshopCommunity\Core\Base->__call(‘cleanAddress’, Array)\n#1 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(524): myModule_UserComponent->createUser()\n#2 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/FrontendController.php(543): OxidEsales\EshopCommunity\Core\Controller\BaseController->executeFunction(‘createuser’)\n#3 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(382): OxidEsales\EshopCommunity\Application\Controller\FrontendController->init()\n#4 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(272): OxidEsales\EshopCommunity\Core\ShopControl->_initializeViewObject(‘OxidEsales\\Esho…’, ‘createuser’, NULL, NULL)\n#5 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): OxidEsales\EshopCommunity\Core\ShopControl->_process(‘OxidEsales\\Esho…’, ‘createuser’, NULL, NULL)\n#6 /opt/lampp/htdocs/oxid6/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()\n#7 /opt/lampp/htdocs/oxid6/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()\n#8 {main}\n"] []

Ich habe den Eindruck, dass es nicht ausreicht, ausschließlich die Methode createUser() zu überladen, sondern das noch weiterer Code in meinem eigenen Modul benötigt wird.
Jetzt scheint es ja Probleme beim Zugriff auf die Methode cleanAddress zu geben.

Ja, weil privat:
private function cleanAddress($address, $updatableFields).

Ok, jetzt klappt wieder alles. Vielen Dank!

Ich habe die private function cleanAddress und die private function trimAddress noch in mein Modul aufgenommen.
Darüber hinaus musste ich noch den direkten Pfad für die folgenden Klassen definieren:
oxNew(\OxidEsales\Eshop\Core\Form\UpdatableFieldsConstructor::class)
oxNew(\OxidEsales\Eshop\Core\Form\FormFields::class, $address))
oxNew(\OxidEsales\Eshop\Core\Form\FormFieldsTrimmer::class)
oxNew(\OxidEsales\Eshop\Application\Model\User\UserShippingAddressUpdatableFields::class)

Oxid 6 scheint sich hier anders zu verhalten als Oxid 4.
Die Methoden cleanAddress() und trimAddress() gab es bei Oxid 4 nicht. Dafür die beiden Methoden cleanBillingAddress() und cleanDeliveryAddress(). Beide waren auch private functions und mussten nicht explizit mit in das Modul aufgenommen werden.
Außerdem scheint es so zu sein, dass der Pfad von Klassen in eigenen Modulen immer explizit angegeben werden muss.
In den Oxid Originaldateien wie der UserComponent.php reicht z.B. ein

$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(UserUpdatableFields::class));

aus.
In einem eigenen Modul muss der Aufruf hingegen zwingend wie folgt aussehen:

$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(\OxidEsales\Eshop\Application\Model\User\UserUpdatableFields::class));