Ergebnis 1 bis 21 von 21

Thema: Contao 4.9 / Hook prepareFormData anlegen

  1. #1
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard Contao 4.9 / Hook prepareFormData anlegen

    Hallo zusammen,

    ich möchte gerne den Hook prepareFormData verwenden und habe dazu folgende Dateien angelegt

    /system/modules/myHook/config/config.php

    PHP-Code:
    $GLOBALS['TL_HOOKS']['prepareFormData'][] = array('myHookClass''myHookPrepareFormData'); 
    /system/modules/myHook/config/myHookClass.php

    PHP-Code:
    <?php

    class myHookClass extends Backend {

        public function 
    myHookPrepareFormData($submittedData$labels$fields$form)
        {
            
    var_dump('PrepareFormData');
            die();
        }
        
    }
    Danach habe ich ProdCache erneuert und Composer Class Loader akualisiert.
    Beim Absenden eines Formulares sollte meiner Meinung nach nun auf einen leeren Screen erscheinen

    das var_dump von 'PrepareFormData' und dann nichts mehr.

    Das Formular wird aber normal, ohne Verwendung des Hooks abgesendet.

    Was mache ich hier noch falsch?

    Ich habe mir auch die Dokumentation zu Contao 4.9 angesehen -> https://docs.contao.org/dev/referenc...epareFormData/

    Allerdings habe ich hier nicht gefunden, wo die Datei

    src/EventListener/PrepareFormDataListener.php

    angelegt werden sollte

    Ich danke für Hinweise


    Thomay

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Na eben genau unter diesem Pfad musst/kannst du die Klasse anlegen.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Na eben genau unter diesem Pfad musst/kannst du die Klasse anlegen.
    aber wo liegt das /src/EventListener/ Verzeichnis?

    Das finde ich in der Dokumentation nicht.

    Und zum Verständnis:

    Man legt dann (da) unter /src/EventListener/
    eine Datei mit dem gleichen Namen PrepareFormDataListener.php an und Contao verwendet dann diese Klasse?

    Danke sehr

    Thomas

  4. #4
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.942

    Standard

    Ja. Einzige Einschränkung: es ist der Pfad src/, also relativ zu dem Installationsverzeichnis Deiner Contao Installation. Der Pfad /src/ wäre ein absoluter Pfad und Du hättest auf einem Shared Hosting dort wahrscheinlich keine Schreibrechte und Contao würde dort nicht suchen ;-)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  5. #5
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    ok, das habe ich verstanden.

    Ich versuche es mal .... danke schonmal


    Thomas
    Geändert von Thomas Pyrin (22.04.2022 um 14:25 Uhr)

  6. #6
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    ich habe die Datei

    src/EventListener/PrepareFormDataListener.php

    eine Ebene über "web" ange

    PHP-Code:



    // src/EventListener/PrepareFormDataListener.php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\Form;

    /**
     * @Hook("prepareFormData")
     */
    class PrepareFormDataListener
    {
        public function 
    __invoke(array &$submittedData, array $labels, array $fieldsForm $form): void
        
    {

            
    var_dump($submittedData);
            die();
        }


    Aber beim Absenden erfolgt keine Änderung - das Formular geht einfach so durch, als ob es die src/EventListener/PrepareFormDataListener.php
    gar nicht geben würde. Auch nach Cache Aufwärmen.

    Was ist da noch falsch?


    Danke sehr schon einmal


    Thomas

  7. #7
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.942

    Standard

    Nur zur Sicherheit: die Datei beginnt mit <?php und das fehlt nur hier in Deinem Post?
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  8. #8
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Ja, die PHP Datei ist in Ordnung, wird aber eben von Contao nicht "verwendet"

    Zur Sicherheit:

    src/EventListener/PrepareFormDataListener.php

    liegt eine Ebene über "web"

    (ich habe es auch innerhalb von "web" versucht, aber das machte auch keinen Unterschied,
    zum einfachen Test habe ich auch manuell den Cache gelöscht und nicht wieder generiert, damit Contao auf
    solche Änderungen direkt reagiert, aber keine Reaktion.

    src/EventListener/PrepareFormDataListener.php

    ist doch der richtige Pfad dafür?

    Danke sehr

    Thomas

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Führe mal vendor/bin/contao-console debug:container PrepareFormDataListener aus um zu testen ob der Service richtig registriert ist.
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Thomas Pyrin Beitrag anzeigen
    src/EventListener/PrepareFormDataListener.php

    ist doch der richtige Pfad dafür?
    Ja.

    mach mal auf Konsole
    PHP-Code:
    php -d memory_limit=--d max_execution_time=900 web/contao-manager.phar.php composer install -
    und dann den Test
    PHP-Code:
    php vendor/bin/contao-console debug:container PrepareFormDataListener 

  11. #11
    Contao-Nutzer Avatar von Black Pirate
    Registriert seit
    10.02.2015.
    Beiträge
    224

    Standard

    Der Ordner "web" liegt doch im Root Verzeichnis.
    Also kann der Ordner "src" nicht ÜBER dem Ordner "web" stehen, sondern auf gleicher Ebene (Root-Verzeichnis).

    Oder hab ich das was falsch verstanden?

  12. #12
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    meine_contao_installation/
    -- 
    contao/
    ...
    -- 
    src/
    -- 
    vendor/
    -- 
    web

  13. #13
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Ja.

    mach mal auf Konsole
    PHP-Code:
    php -d memory_limit=--d max_execution_time=900 web/contao-manager.phar.php composer install -
    und dann den Test
    PHP-Code:
    php vendor/bin/contao-console debug:container PrepareFormDataListener 
    So, ich hab den Test jetzt mal gemacht und folgende Meldung bekommen:


    PHP-Code:


    Information 
    for Service "App\EventListener\PrepareFormDataListener"
    ===================================================================

     ---------------- ------------------------------------------- 
      
    Option           Value                                      
     
    ---------------- ------------------------------------------- 
      
    Service ID       App\EventListener\PrepareFormDataListener  
      
    Class            App\EventListener\PrepareFormDataListener  
      Tags             contao
    .hook (hookprepareFormData)        
      Public           
    yes                                        
      Synthetic        no                                         
      Lazy             no                                         
      Shared           yes                                        
      
    Abstract         no                                         
      Autowired        yes                                        
      Autoconfigured   yes                                        
     
    ---------------- ------------------------------------------- 

    Hilft das weiter? Der Hook wird weiterhin beim Formular absenden ignoriert.

    Danke für die Hilfe

    Thomas

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Sieht korrekt aus. Poste mal einen Link zum Formular.
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Sieht korrekt aus. Poste mal einen Link zum Formular.

    http://drugscouts.kdndb.de/erfahrung...schreiben.html

    da ist momentan nur ein Feld drin, als Test - es wird abgeschickt, landet auf der gleichen seite wieder (das ist alles noch im Test) und der "Titel" wird auch als neuer DB Eintrag in der tl_news gespeichert - das klappt soweit alles.

    Ich brauche den Hook vor allem, weil später auch noch andere Felder kommen, die nicht in der tl_news Tabelle sind und die muss ich vor dem Speichern aus dem $_POST nehmen und anderweitig verwenden.


    Danke für die Hilfe

    Thomas

  16. #16
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    In eine autoload oder sowas muss man das nicht extra noch eintragen?

    Komisch, dass Contao von dem Verzeichnis so gar keine Notiz nimmt, nicht mal ein Fehler, wenn ich die php Datei bewusst mit falscher Syntax schreibe oder sowas.

  17. #17
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Mh, was könnte ich noch probieren, um den Hook zum funktionieren zu bekommen?

  18. #18
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Es ist (vorerst) gelöst:

    ich habe das hier

    PHP-Code:

    "autoload": {
            
    "psr-4": {
                
    "App\\""src/"
            
    }
        } 
    in die composer.json eingefügt und nochmals den Composer Class Loader im ContaoManager ausgeführt und nochmals den Cache aufgewärmt.
    Jetzt wird der Hook erkannt.

    Ist denn der "autoload" Zusatz in der composer.json zwingend notwendig?


    Danke und vielleicht geht es jetzt bei mir zügiger weiter

    Thomas

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Sollte nicht notwendig sein und laut deiner Konsolenausgabe war der Hook auch korrekt registriert.
    » sponsor me via GitHub or PayPal or Revolut

  20. #20
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Sollte nicht notwendig sein und laut deiner Konsolenausgabe war der Hook auch korrekt registriert.
    Gut - dann versuche ich das testweise auch nochmal ohne - vielleicht geht es dann doch auch.

    Eine Frage habe ich noch:

    Was muss ich noch einbinden, damit ich auf die DB zugreifen kann innerhalb des Hooks und was, um z.B.

    StringUtil::generateAlias($submittedData['title']);

    zu verwenden?


    Danke für die Hilfe


    Thomas

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Für Zweiteres https://docs.contao.org/dev/reference/services/#slug

    Für Ersteres Doctrine\DBAL\Connection (muss ich mal in der useful services list ergänzen).
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •