Ordner-Struktur GXEngine

Thema wurde von Steffen (indiv-style.de), 11. März 2016 erstellt.

  1. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Ich finde es etwas unübersichtilich das Controller mit in das gleiche Verzeichnis sollen wie die originalen Controller welche der Shop im Standart mitbringt!

    Ein Extra-Ordner wie bei den user_classes(da legt man auch nix in /system ab!) wäre bedeutend übersichtilicher! Hat dies einen Grund?
     
  2. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    Ich gehe schwer von aus das die Ordner "GXEngine" und "user_classes" bald zu einem "vendor" Ordner mutieren.
    Bis dahin braucht man ja bloß einen MeinHauptController unter GXEngine abzulegen womit man leben kann.
    Wenn es eine Suppe aus Controller, Model, Interface und Traits wird, da sehe ich die eigentlichen Problematik.

    Ich bin jedoch voller Hoffnung dass Gambio bald den Kern in den "vendor" Ordner ablagert.
    Gambio weißt schon worauf ich hinaus will :D
     
  3. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Hallo,

    ja, wir sind damit auch noch nicht so ganz zufrieden und müssen uns noch was überlegen. Ich habe es mir mal notiert. Es hat jedenfalls keinen besonderen Grund, warum es bisher keinen "user_classes"-Bereich für den GXEngine-Bereich gibt.
     
  4. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Ich muss meine Aussage nochmals präzisieren: Man kann jetzt bereits alle seine eigenen GXEngine-Klassen im user_classes-Ordner ablegen. Ausnahme sind ModuleCenterModule-Klassen, die aktuell noch im Ordner GXEngine/Modules liegen müssen. Auch dies werden wir spätestens zur Version 2.9 nicht mehr vorgeben. Der Ort der Datei sollte nämlich keine Rolle spielen. Die Erkennung eines Moduls für das Modul-Center sollte anhand des implementierten Interfaces geschehen.
     
  5. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    @Moritz (Gambio)
    Bedeutet so viel wie - ich kann einen X-beliebigen Ordner/Datei unter "user_classes" ablegen, diesen mit Unterordner/Klassen usw. befüllen und das System erkennt dieses automatisch?

    Beispiel:
    Habe unter "GXEngine/Controllers/MonevoApiController.inc.php" laut der Doku abgelegt.

    Diese Datei kann ich jedoch auch unter "user_classes/monevo/Controllers/MonevoApiController.php" ablegen und Gambio erkennt diese auch?
     
  6. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Ja. Wenn es nicht funktioniert, bitte schreien. Ich hatte grad einiges einfach mal in den user_classes-Ordner verschoben und es ging noch.
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    #7 Anonymous, 11. März 2016
    Zuletzt bearbeitet: 11. März 2016
    Ja, viele Dank für dieses!

    Auf die gleiche Frage, wo ich eigene Klassen ablegen kann, wurde ich gestern noch auf die Doku hingewiesen. Da steht nichts von "user_classes/.../..." oder ich habe eine Leseschwäche.

    Das erspart mir als solches jede Menge Arbeit und Zeit.
    Da man nicht mehr im Hinterkopf haben muss, ständig aufzupassen ob das System einem auf die Finger haut, weil man irgendwas, irgendwo vergessen hat abzulegen. :D
     
  8. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Guter Tipp mit dem Hinweis für die Doku! Werden wir aufnehmen.
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    Könnte man auch eine Art "autoloader" für Dateien in Gambio erstellen, vergleichbar mit dem Composer

    Code:
    "autoload": {
      "psr-4": {
        "Monevo\\": "user_classes/monevo/src"
      },
      "files": [
        "user_classes/monevo/src/Support/helpers.php"
      ]
    }
    
    Wofür das ganze?
    Nun, wenn man, wie in meinem Fall, sich einige Hilfsfunktionen zusammen basteln möchte, will ich weeeeeeeeeeeit weg von dem ganzen require dies, include jenes....
     
  10. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Wollen wir auch ;)
     
  11. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20

    Wenn ihr schon dabei seid, wäre es für eure Entwickler sehr umständlich das HttpViewResponseProcessor (oder was auch immer dafür zuständig ist) so umzustellen, dass die ganzen Parameter die nach einem "action"-Aufruf übergeben werden mit einem "/" als separate "action"-Aufrufe aufgelöst werden?

    Beispiel
    Code:
    admin/admin.php?do=module/sample/edit/
    
    verweist auf

    PHP:
    public function edit(){}
    Code:
    admin/admin.php?do=module/sample/edit/conf
    
    verweist auf

    PHP:
    public function conf(){}
    usw...


    Oder besteht schon diese Möglichkeit???
     
  12. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Puh, das weiss ich so nicht, ich stecke da nicht genug in den speziellen Details der Planung der Coreentwicklung. Ich denke Moritz wird dazu in den nächsten Tagen gern was sagen, der wäre da ein Spezi :)
     
  13. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Und da bin ich auch schon. Also du kannst über die Url steuern, welche action-Methode vom HttpViewController aufgerufen wird. Am besten schaust du dir mal das Tutorial dazu an: https://developers.gambio.de/tutorials.html?v=2.7.2.0&p=http-service-tutorial
    Falls das deine Frage nicht beantwortet, meldest du dich einfach nochmals und dann mache ich das gerne nochmals an gewünschten Beispielen etwas konkreter.
     
  14. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    Zumindest die typischen RESTfull Methoden (create, edit, show) wären super als eigenständige "action".
    Dadurch spart man sich einigen Codesalat in der "actionSample" Methode und ein ständiges switch-case oder if-else Abfragen wären wie weggefegt.
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    Danke für deinen Hinweis @Moritz (Gambio) ...
    Das heißt ich müsste für jede typische RESTfull-Methode
    PHP:
    public function actionSample(){}
    public function 
    actionSampleCreate(){}
    public function 
    actionSampleEdit(){}
    public function 
    actionSampleShow(){}

    public function 
    actionNewSample(){}
    public function 
    actionNewSampleCreate(){}
    public function 
    actionNewSampleEdit(){}
    public function 
    actionNewSampleShow(){}
    erstellen?
     
  16. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Ja. Du hast eine bessere Idee zur Umsetzung?
     
  17. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20
    Nein, habe ich nicht. Bin auch kein experte in Sachen PHP-Programmierung :(

    Dachte bloß es gäbe die Möglichkeit wie z.B.

    Code:
    admin/sample/edit
    
    verweist auf den SampleController und ruft die edit Methode auf
     
  18. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Ok. Fassen wir nochmal zusammen, wie es funktioniert:

    admin.php?do=Sample -> SampleController::actionDefault()
    admin.php?do=Sample/Create -> SampleController::actionCreate()
    admin.php?do=Sample/Edit -> SampleController::actionEdit()
    admin.php?do=Sample/Show -> SampleController::actionShow()

    Es ist also kein ständiges switch-case oder if-else notwendig :).
     
  19. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    16. Januar 2016
    Beiträge:
    656
    Danke erhalten:
    115
    Danke vergeben:
    20

    Was mache ich dann in solch einem Fall mit den ganzen create, edit, show, delete und update Sachen?

    // Index-Seite von Monevo API
    admin.php?do=Monevo -> MonevoController::actionDefault()

    // Index-Seite von eBay-Connect Schnittstelle
    admin.php?do=Monevo/eBay -> MonevoController::actionEbay()

    // Show-Seite von eBay-Connect Schnittstelle
    admin.php?do=Monevo/eBayShow -> MonevoController::actionEbayShow()

    usw...

    Bei mehreren API-Ansammlungen wird der arme MonevoController irgendwann aus allen Nähten platzen...

    Wie gesagt, dachte nur es wäre eine Umsetzung in der Art machbar:

    // Index-Seite von Monevo API
    admin.php?do=Monevo -> MonevoController::actionDefault()

    // Index-Seite von eBay-Connect Schnittstelle
    admin.php?do=Monevo/eBay -> Monevo/EbayController::actionDefault()

    // Show-Seite von eBay-Connect Schnittstelle
    admin.php?do=Monevo/eBay/show -> Monevo/EbayController::actionShow()

    usw...
     
  20. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Wie wäre es damit:

    // Index-Seite von Monevo API
    admin.php?do=Monevo -> MonevoController::actionDefault()

    // Index-Seite von eBay-Connect Schnittstelle
    admin.php?do=MonevoEbay -> MonevoEbayController::actionDefault()

    // Show-Seite von eBay-Connect Schnittstelle
    admin.php?do=MonevoEbay/Show -> MonevoEbayController::actionShow()