gelöst Probleme beim erstellen einen Moduls (neue Variante)

Thema wurde von BigRib, 4. Oktober 2021 erstellt.

  1. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Hallo zusammen, ich habe mal versucht nach Anleitung im Gambio Developer ein Modul für den Adminbereich zu erstellen. Ich habe die Beispiele aus den Tutorials verwendet, bekomme aber eine Fehlermeldung.

    Ich habe auf meinem Testserver die Version 4.5.1.0_Beta2

    routes.php
    Code:
    <?php
    use Gambio\Core\Application\Routing\RouteCollector;
    use GXModules\Thrownatur\AdminCombiCollections\Admin\GetAdminCombiCollections;
    
    return static function (RouteCollector $routeCollector) {
        $routeCollector->get('/admin/GetAdminCombiCollections', GetAdminCombiCollections::class)->setName('GetAdminCombiCollections');
    };
    GetAdminCombiCollections.php
    Code:
    <?php
    namespace GXModules\Thrownatur\AdminCombiCollections;
    use Gambio\Core\Application\Http\Response;
    use Gambio\Admin\Application\Http\AdminModuleAction;
    /**
    * Class SampleAction
    * @package GXModules/<Vendor>/<Module>
    */
    class GetAdminCombiCollections extends AdminModuleAction
    {
        /**
         * Parses a admin template and returns it as response.
         *
         * @return Response
         */
        protected function handle(): Response
        {
            $pageTitle    = $this->translate('sample_module_title_text_phrase', 'sample_module_section');
            $templatePath = '/Html/admin_combi_collection.html';
            $templateData = [
                // key value pairs that are accessible in the template
                'greeting' => 'Hello World'
            ];
            $template     = $this->render($pageTitle, $templatePath, $templateData);
    
            return $this->response->write($template);
        }
    }
    admin_combi_collection.html
    Code:
    {extends file="layout.html"}
    
    {block name="content"}
        <div>{$greeting}</div>
    {/block}
    Fehlermeldung:
    Jemand eine Idee was ich falsch gemacht haben könnte?

    Danke
     
  2. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    930
    Danke erhalten:
    802
    Danke vergeben:
    300
    Hi Sven, die Meldung besagt, dass Du in der GetAdminCombiCollections.php Zeile 16
    Code:
    protected function handle(): Response
    ersetzen solltest durch
    Code:
    public function handle(): Response
     
  3. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Hi Dominik,

    danke für Deine Antwort. Das hatte ich aus Neugierde auch probiert gehabt, dann kommt aber folgende Fehlermeldung:

    Und ich habe dann mal in die verschiedene Dateien geschaut die ebenfalls die handle() aufrufen und die stehe alle auf protected.
     
  4. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    930
    Danke erhalten:
    802
    Danke vergeben:
    300
    Die jetzige Meldung sagt, dass die Methode gerne 2 Parameter hätte:
    Code:
    public function handle(Request $request, Response $response): Response
     
  5. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Oki danke, wir sind schonmal weiter. Nun wird der Admin Bereich wieder aufgerufen, aber mit einem 500 - Server-Fehler. Im Log steht folgende:

    Im Ordner
    Liegt die Datei GetAdminCombiCollections.php
     
  6. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    930
    Danke erhalten:
    802
    Danke vergeben:
    300
    Code:
    use GXModules\Thrownatur\AdminCombiCollections\Admin\GetAdminCombiCollections;
    soll vermutlich den hier hier referenzieren:
    Code:
    namespace GXModules\Thrownatur\AdminCombiCollections;
    Dann fehlt da wohl ein \Admin im Namespace:
    Code:
    namespace GXModules\Thrownatur\Admin\AdminCombiCollections;
     
  7. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    #7 BigRib, 5. Oktober 2021
    Zuletzt bearbeitet: 5. Oktober 2021
    Hmm im Thrownatur Ordner ist aber der AdminCombiCollections Ordner und dann kommt erst der Admin Ordner.

    Ich habe mich versucht an die Vorgaben hier zu halten: https://developers.gambio.de/docs/4.../module-development/admin/define-http-routes/

    Vendor = Thrownatur
    Module = AdminCombiCollections


    upload_2021-10-5_18-53-56.png

    Anstelle von HttpActions habe ich Admin genommen. SampleGetAction heißt bei mir GetAdminCombiCollections.

    Für die HTTP Action habe ich mich für folgendes Snippet entschieden und angepasst

    upload_2021-10-5_18-56-46.png

    Hier habe ich wieder Vendor und Module ausgetauscht und den $tempatePath angepasst.

    Zusätzliche habe ich jetzt noch di Methode abgeändert:

    Code:
     public function handle(Request $request, Response $response): Response
    Und damit das funktioniert, musste ich noch oben

    Code:
    use Gambio\Core\Application\Http\Request;
    Hinzufügen
     
  8. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    So ich habe den Namespace nun abgeändert in:
    Code:
    namespace GXModules\Thrownatur\AdminCombiCollections\Admin;
    Die Klasse wird nun gefunden, nun gehen die Fehlermeldungen aber weiter.

    Und nun kommt:

    upload_2021-10-5_19-14-35.png

    Entweder bin ich echt zu ungeschickt für die neue Variante, oder das Tutorial ist eher ein Platzhalter für die richtige Version die irgendwann mal kommt.
     
  9. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.656
    Danke erhalten:
    1.261
    Danke vergeben:
    300
    @BigRib Du musst deine Action noch Registrieren über einen Service Provider, siehe (Link nur für registrierte Nutzer sichtbar.)

    Hier im Anhang ein Sample Modul wie du das einbauen kannst
     

    Anhänge:

  10. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Super, danke euch beiden, nun gehts :D
     
  11. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Hallo @Till (Gambio)

    darf ich die folgende Frage hier noch anhängen? Passt ja irgendwie zusammen.

    Ich habe die AdminHeaderExtenderComponent überladen, die wird beim Cache löschen auf der "Cache löschen Seite" auch eingebunden. Auf meiner selbst erstellten Admin-Seite jedoch nicht. Muss ich da noch was einfügen, damit die Extender eingebunden werden?
     
  12. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.656
    Danke erhalten:
    1.261
    Danke vergeben:
    300
    @BigRib Kannst du uns mal etwas genauer erzählen was du im HeaderExtender noch hinzufügen willst, weil in den neuen Admin Seiten ist das alles anders, hier greifen keine Extender für den AdminHeader.
     
  13. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    @Till (Gambio)

    ich wollte JS einbinden mit dem ich bei Click in eine Checkbox dies direkt in die Datenbank schreiben kann. Also per Javascript eine PHP Methode aufrufen und Daten übergeben.
     
  14. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    1.656
    Danke erhalten:
    1.261
    Danke vergeben:
    300
    @BigRib Es gibt im HTML einen Block den du überladen oder ergänzen kannst

    In deiner HTML Datei fügst du einfach folgenden Block ein:
    HTML:
    {block name="custom_scripts"}
        <script src="{$myJS}"></script>
    {/block}
    In deiner PHP Datei fügst du das ein:
    PHP:
    public function handle(Request $requestResponse $response): Response
        
    {
            
    $templateData = [
                
    // key value pairs that are accessible in the template
                
    'myJS' => "{$this->url->base()}/GXModules/MeineFirma/MeinModul/pfadZuMeinerJavaScriptDatei.js"
            
    ];
          
            
    $template     $this->render($pageTitle$templatePath$templateData);
          
            return 
    $response->write($template);
        }
    Du musst also kein Overload mehr für AdminHeaderExtenderComponent erstellen.
     
  15. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    @Till (Gambio)

    Super! Das funktioniert wunderbar, nur $this->url->base() ist an der Stelle nicht bekannt.

    Gruß