Namespaces Erstellung funktioniert nicht


#1

Hi,
Ich bin aktuell immer noch … dabei ein lokales Beispielmodul für mich zu erstellen, welches ich als vorlage benutzen kann.
deploy und installation scheinen jetzt zu funktionieren.

git

Bei der Modulenfernung scheint einiges noch nicht vernünftig zu funktionieren… da bleibt immer noch was hängen.

Mein Problem:
die namespaces werden nicht erstellt.
wen ich diese Dokumentation hier anschaue, so benötige ich ja lediglich eine Datei in meinem Modul und die Namespace generierung sollte ohne jeglichen weiteren schnick schnack funktionieren wenn ich ich composer require oder update mache und die Dateien meines moduls überschreiben lasse.

<?php
namespace my\gg_oxid6examplemodule\core;

class oxid6examplemodule
{
    function __construct(){

    }
    public function doSomething()
    {
        //.....
        print_r("Namespace Installed!!!!");
        //......
    }
}

Wenn Ich nun aber die folgenden Code ausführe

//use \gripgate2\gg_oxid6examplemodule\application\model\oxid6examplemodule;

try {

    if (file_exists(getShopBasePath() . 'index.php') === false) {
        throw new Exception('Dateipfad ist falsch', 30);
    }

    define('OX_BASE_PATH', getShopBasePath());
    require_once getShopBasePath() . 'bootstrap.php';
    
    try {

        print_r("START<br>\n"); 
        //$oEbay = oxNew( 'ggeBay' );
        $ggpaypalexpress = oxNew( \my\gg_oxid6examplemodule\core\oxid6examplemodule::class );
        //$ggpaypalexpress = oxNew(my\gg_oxid6examplemodule\Controller\Admin\MainController::class);
        //$test = oxNew('oxid6ExampleModule');
        //$test = new oxid6ExampleModule;

so bekomme ich immer folgende Fehlermeldung

OxidEsales\Eshop\Core\Exception\SystemComponentException Object
(
    [type:protected] => oxSystemComponentException
    [_sComponent:OxidEsales\EshopCommunity\Core\Exception\SystemComponentException:private] =>
    [_sFileName:protected] => /vagrant/oxideshop/source/log/oxideshop.log
    [_blRenderer:protected] =>
    [_blNotCaught:protected] =>
    [message:protected] => EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND gripgate2\gg_oxid6examplemodule\core\oxid6examplemodule
    [string:Exception:private] =>
    [code:protected] => 0
    [file:protected] => /vagrant/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php
    [line:protected] => 222
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /vagrant/oxideshop/source/oxfunctions.php
                    [line] => 101
                    [function] => oxNew
                    [class] => OxidEsales\EshopCommunity\Core\UtilsObject
                    [type] => ->
                    [args] => Array
                        (
                            [0] => gripgate2\gg_oxid6examplemodule\core\oxid6examplemodule
                        )

                )

            [1] => Array
                (
                    [file] => /vagrant/oxideshop/source/crons_gg/ggpaypalexpress.php
                    [line] => 25
                    [function] => oxNew
                    [args] => Array
                        (
                            [0] => gripgate2\gg_oxid6examplemodule\core\oxid6examplemodule
                        )

                )

        )

    [previous:Exception:private] =>
    [xdebug_message] =>
OxidEsales\Eshop\Core\Exception\SystemComponentException: EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND gripgate2\gg_oxid6examplemodule\core\oxid6examplemodule in /vagrant/oxideshop/vendor/oxid-esales/oxideshop-ce/source/Core/UtilsObject.php on line 222

Call Stack:
    0.0016     361912   1. {main}() /vagrant/oxideshop/source/crons_gg/ggpaypalexpress.php:0
    0.2139     452360   2. oxNew() /vagrant/oxideshop/source/crons_gg/ggpaypalexpress.php:25
    0.2486     459672   3. OxidEsales\Eshop\Core\UtilsObject->oxNew() /vagrant/oxideshop/source/oxfunctions.php:101

)
Error
Message: Module namespace ist nicht richtig installiert:EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND gripgate2\gg_oxid6examplemodule\core\oxid6examplemodule
Code: 40

ich habe schon alles mögliche versucht
unter anderem
im Modul
class xxxx extends \OxidEsales\Eshop\Core\Model\MultiLanguageModel
metadata
‘files’ => array(
‘ggebay’ => ‘my/gg_ebay/core/ggebay.php’,)
So wie es unter anderem bei existierenden modulen der fall ist, die allerdings keine composer haben. Wo allerdings der namepsace abrufbar ist.

Wäre echt super wenn mir einer zeigen könnte was ich falsch mache. Ich würde ungern unbeteiligte module zumüllen


#2

klappt es wenn du deinen namespace manuell in der composer.json registierst und dann composer dump-autoload machst?


#3

Ich habe folgendes in die root composer geschrieben

“autoload-dev”: {
“psr-4”: {
“oxid6examplemodule\”:"./source/modules/my/gg_oxid6examplemodule/core/oxid6examplemodule"
}
},
"scr

wird ausgeführt ohne Fehler. Beim Aufrufen des namepaces gibts aber die Selbe Meldung EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND


#4

Bei der composer.json in deinem Repo steht “…/…/source”, wenn du bei linslin schaust steht da 3 mal “…/”.


#5

danke, aber damit habe wird der namespace immer noch nicht erstellt. Da muss noch was falsch sein.


#6

was steht in deiner vendor/composer/autoload_psr4.php? findest du dort deine definitionen?


#7

In composer.json steht als namespace “my\oxid6ExampleModule\”. In der metadata und der Klasse verwendest du als namespace aber dann “\my\gg_oxid6ExampleModule”.


#8

in ther autoload_psr4.php sehe ich folgendes
‘my\oxid6ExampleModule\’ => array($baseDir . ‘/source/modules/my/gg_oxid6examplemodule’),


#9

In der meta data habe ich die ja gar nicht drinne. Da steht ja extra in der dokumentation das die da nicht rein muss.
In der class selbst habe ich
<?php

namespace my\gg_oxid6examplemodule\core;

class oxid6examplemodule

weil gg_oxid6examplemodule is ja der modulename und core der unterordner
mit namespace im composer meinst du den

"autoload":    {
    "psr-4": {
        "my\\oxid6ExampleModule\\": "../../../source/modules/my/gg_oxid6examplemodule"
    }
}

blog oder?
du meinst also der soll dann so oder wie?

"my\\gg_oxid6ExampleModule\\core\\oxid6examplemodule": "../../../source/modules/my/gg_oxid6examplemodule"


#10

hast du das irgendwo auf github dein modul?


#11

git


#12

Ja aber ne andere bei controllers.

Du brauchst aber nicht den Modulnamen + Unterordner sondern den Basis-Namespace + Unterordner.
Den Basis-Namespace hast du in composer.json festgelegt als “my\oxid6ExampleModule”.