Probleme mit Klassen


#1

Hallo zusammen,

ich versuche mein Problem kurz zu schildern.
Habe ein Modul erstellt mit dem ich dem Benutzer ein neuen Tab hinzufüge.
Für den Tab sorgt eine menu.xml:
SUBMENU id=“mxusers” cl=“admin_user” list=“user_list”
TAB id=“myUserRights” cl=“myuser_main”
SUBMENU

Das Template von user_extend hab ich kopiert und das wichtigste in meiner myUser_main.tpl behalten.

Eine neue Klasse “myuser_main.php” erstellt:
class myuser_main extends \OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController {
public function render() {
return “myUser_main.tpl”;
}

Die Klasse in der metadata.php unter files verknüpft (unter controller ebenfalls getestet). Bei files mit php Endung und bei controller ohne php Endung.

Egal was ich probiere, ich bekomme ständig die Fehlermeldung das meine Klasse nicht gefunden wird. tmp auch jedes mal geändert. Ich weiß einfach nicht weiter.

Vielleicht kann mir ja jemand hier helfen?

Vorab schon mal vielen Dank!
tBauer


#2

Hi,

“files” gibt es in metadata ab 2.0 nicht.
Versuche es doch mal, wie hier beschrieben: how-to-fully-port-a-module-to-oxid-eshop-6-0:

controllers' => array(
    'xyzmymodulemycontroller' => \XYZ\Mymodule\Application\Controller\OrderController::class
),


#3

Hallo Nickname,

danke für deine Antwort, aber auch unter controllers hab ich die Klasse schon getestet.
Ich bekomme folgenden Fehler, vielleicht sagt dass ja irgend jemand was:

EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND myuser_main

#0 …\oxid\source\oxfunctions.php(101): OxidEsales\EshopCommunity\Core\UtilsObject->oxNew(‘myuser_main’)
#1 …\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\ShopControl.php(372): oxNew(‘myuser_main’)
#2 …\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\ShopControl.php(272): OxidEsales\EshopCommunity\Core\ShopControl->_initializeViewObject(‘myuser_main’, NULL, NULL, NULL)
#3 …\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\ShopControl.php(137): OxidEsales\EshopCommunity\Core\ShopControl->_process(‘myuser_main’, NULL, NULL, NULL)
#4 …\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()
#5 …\oxid\source\index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()
#6 …\oxid\source\admin\index.php(11): require_once(’…\…’)
#7 {main};


#4

Wenn du metadata 2 verwenden willst, muss der Namespace in composer registriert werden. Hast du das gemacht, wenn ja wie?


#5

Hallo leofonic,

also in der composer.json (hatte auch schon mehrere Varianten getestet, z.B. statt myUserAccess mit my_useraccess etc.)… aktuell auf jeden Fall so:

“psr-4”: {
“my\myUserAccess\”: “…/…/…/source/modules/my/my_useraccess”
}

und in der myuser_main.php:

namespace my\myUserAccess\Application\Controller\Admin;

class myuser_main extends myuser_main_parent (Auch statt mit parent mit Namespace zu AdminController getestet)

Viele Grüße
tBauer


#6

Hi,
du könntest ein ähnliches Modul suchen und als Vorlage nehmen oder gleich umbauen.
Dieses fügt auch einen Punkt im Adminmenü ein:


#7

OK das ist die composer.json des Moduls. Der Namespace muss aber von der composer.json des Shops geladen werden. Damit composer den Namespace mitbekommt, gibt es verschiedene Möglichkeiten:

  1. Modul über composer im Shop installieren (z.B. aus Git Repo, Zip Repo oder Packagist)
  2. während der Entwickung gibt es ja kein Repo, dann schägt Oxid vor den Modulpfad selbst als Repo einzutragen: https://docs.oxid-esales.com/developer/en/6.1/modules/good_practices/module_setup.html
  3. Ich habe mir ein Modul geschrieben das zur Laufzeit die composer.json der Module parst und den Namespace lädt: https://github.com/leofonic/oxid-autoregister-namespaces

#8

Nice! Vielen Dank!