Oxid 6 Modul: ohne Composer, "Old School" - grundsätzliche Probleme beim Portieren

Hallo zusammen,
ich bin vorläufig daran gescheitert, meine alten Module auf Oxid 6 zu portieren. (An Dokumentationen mangelt es nicht, ich habe mir auch das PayPal-Beispiel angesehen.) Jedenfalls will ich jetzt erstmal ein einziges Modul mit Metadata 1, ohne Namespace-Gedöns und ohne Composer unter Oxid 6 zum laufen bringen, was ja angeblich immer noch problemlos möglich sein soll. Leider will auch das nicht klappen. Ich hoffe hier auf einen kleinen Fingerzeig von euch, vielleicht kann ich mich ja von dort aus weiterhangeln…

Das Modul soll ein paar zusätzliche Dinge im Adress-Formular validieren. Dazu erweitert es oxuser und nutzt dazu zunächst mal eine 1:1 Kopie der Funktion checkValues (die dann später angepasst wird).
Das Modul wird im Backend angezeigt, kann aktiviert werden. Im Frontend kommt es allerdings zum Absturz, Fehlermeldung wenig aussagekräftig (Exception…)
Durch Auskommentieren von Code-Zeilen habe ich festgestellt, dass schon die erste Zeile in der Funktion checkValues für den Absturz sorgt:

class addresscheck extends oxuser
{

    public function checkValues($sLogin, $sPassword, $sPassword2, $aInvAddress, $aDelAddress)    
    {                
        $this->_checkLogin( $sLogin, $aInvAddress );   // <== sorgt direkt für Absturz

Die neue Schreibweise:

$oInputValidator = Registry::getInputValidator();
$sLogin = $oInputValidator->checkLogin($this, $sLogin, $aInvAddress);

macht die Sache auch nicht besser.
Hat jemand eine Idee, wo der Haken liegt?

Danke schon mal für Hinweise :slight_smile:

Wie lautet die Fehlermeldung?

Gerade noch mal ausgelesen; darin stecken doch mehr Infos, als ich in Erinnerung hatte:

[exception] [type OxidEsales\Eshop\Core\Exception\SystemComponentException] [code 0] [file /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Core/Base.php] [line 74] [message Function '_checkLogin' does not exist or is not accessible! (addresscheck)
]
[exception] [stacktrace] #0 /srv/vhost-name/source/modules/floko/fkcustom-old/Application/Model/addresscheck.php(15): OxidEsales\EshopCommunity\Core\Base->__call('_checkLogin', Array)
[exception] [stacktrace] #1 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Application/Component/UserComponent.php(430): addresscheck->checkValues('[email protected]', NULL, NULL, Array, Array)
[exception] [stacktrace] #2 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(523): OxidEsales\EshopCommunity\Application\Component\UserComponent->createUser()
[exception] [stacktrace] #3 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/FrontendController.php(507): OxidEsales\EshopCommunity\Core\Controller\BaseController->executeFunction('createuser')
[exception] [stacktrace] #4 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(382): OxidEsales\EshopCommunity\Application\Controller\FrontendController->init()
[exception] [stacktrace] #5 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(272): OxidEsales\EshopCommunity\Core\ShopControl->_initializeViewObject('OxidEsales\\Esho...', 'createuser', NULL, NULL)
[exception] [stacktrace] #6 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): OxidEsales\EshopCommunity\Core\ShopControl->_process('OxidEsales\\Esho...', 'createuser', NULL, NULL)
[exception] [stacktrace] #7 /srv/vhost-name/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()
[exception] [stacktrace] #8 /srv/vhost-name/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()
[exception] [stacktrace] #9 {main}

Na ja und hier steht doch auch das Problem … was deine Aussage auch widerspiegelt?!

Im Prinzip schon, ich kann im Moment daraus nur leider keine Korrektur ableiten.
Diese Zeile ist ja der unveränderte Code der Core-Funktion, allerdings vor Oxid 6.
Mit der Oxid 6-Fassung komme ich allerdings auch nicht über die erste Zeile hinaus.

Verwende ich die erste Zeile der neuen Version von checkValues, also
$oInputValidator = Registry::getInputValidator();
bekomme ich diese Fehlermeldung:

[uncaught error] [type E_ERROR] [file /srv/v-host-name/vendor/oxid-esales/oxideshop-ce/source/Core/Exception/ExceptionHandler.php] [line 114] [code ] [message Uncaught TypeError: Argument 1 passed to OxidEsales\EshopCommunity\Core\Exception\ExceptionHandler::handleUncaughtException() must be an instance of Exception, instance of Error given in /srv/v-host-name/vendor/oxid-esales/oxideshop-ce/source/Core/Exception/ExceptionHandler.php:114
Stack trace:
#0 [internal function]: OxidEsales\EshopCommunity\Core\Exception\ExceptionHandler->handleUncaughtException(Object(Error))
#1 {main}
  thrown]

Alte Schreibweise geht nicht, neue auch nicht - und zu diesem Zeitpunkt hab ich noch nichts eigenes hinzugefügt.
Ich stehe auf dem Schlauch, wie ich so ein neues Modul bauen soll…

das müsste lauten:

class addresscheck extends addresscheck_parent

Du kannst den kompletten Namespace angeben:

$oInputValidator = \OxidEsales\Eshop\Core\Registry::getInputValidator();

Oder den Namespace oben angeben wie in User.php:

use OxidEsales\Eshop\Core\Registry;

Oder den backwards compatible Namen verwenden:

$oInputValidator = oxregistry::getInputValidator();
1 Like

Vielen Dank! Das probiere ich gleich aus…

Funktioniert perfekt - noch mal vielen Dank!