Contao-Camp 2024
Ergebnis 1 bis 19 von 19

Thema: Contao Manual > Guides > Save form data

  1. #1
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard Contao Manual > Guides > Save form data

    Hallo Contao-Experten!

    Ich benötige Hilfe beim Verwenden dieses Hooks mit Contao Version 4.9.33
    Die Anleitung unter https://docs.contao.org/manual/en/gu...repareformdata habe ich abgearbeitet:

    Ich habe ein Formuar eingerichtet.
    Ich habe die Datei "PrepareFormDataListener.php" erstellt.
    In der Datei habe ich die IDs angepasst.
    Ich habe eine Verzeichnis "src" erstellt auf der gleichen Ebene wie "files", "system", "templates" usw.
    Ich habe ein Unterverzeichnis "EventListener" erstellt.
    Ich habe in das Unterverzeichnis die Datei "PrepareFormDataListener.php" gespeichert.
    Ich habe den "Contao Manager" aufgerufen und auf "Prod.-Cache erneuern" geklickt.
    Ich habe anschließend das Formular ausgefüllt und abgeschickt.
    Den Datensatz in der Datenbank kann ich sehen, aber ich kann keine Änderungen durch den Hook erkennen.
    Ich sehe keine Fehlermeldung.

    Was habe ich übersehen oder nicht richtig gemacht?

    Muss ich den Hook noch irgendwo registrieren?
    Stimmt der Verzeichnisort?
    Muss der Namespace geändert werden?
    Muß ich einen Regentanz aufführen?

    Jeder Tipp ist willkommen.

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

    Standard

    sieht soweit eigentlich gut aus...

    ändere mal die Zeile

    PHP-Code:
    // Check if this is the right form 
    zu
    PHP-Code:
    dd('da bin ich');
    // Check if this is the right form 
    Wenn Du jetzt das Formular absendest und im Debugmodus bist, sollte eine Meldung "da bin ich" zu sehen sein - wenn nicht, wird der Hook nicht geladen...

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

    Standard

    Zitat Zitat von henrysecond Beitrag anzeigen
    Ich habe den "Contao Manager" aufgerufen und auf "Prod.-Cache erneuern" geklickt.
    composer install fehlt dir evt. noch
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard Keine Meldung "da bin ich"

    Hallo zonky und Spooky,

    vielen Dank für die Rückmeldung!

    Allein: Die Meldung "da bin ich" erscheint nicht.

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

    Standard

    ich stehe mit den ganzen "magic thinks" auch etwas auf Krigesfuß - will meinen, bei welche Contao-Version kann/muss ich was unbedingt einstellen und was sollte automatisch erfolgen ist mir nicht 100%ig klar...

    "my way" ist eigentlich immer so, dass ich

    in die composer.json eintrage

    PHP-Code:
        "autoload": {
            
    "psr-4": {
                
    "App\\""src/"
            
    }
        }, 
    - sollte (m.E.) eigentlich nicht notwendig sein, aber wenn eingerichtet funktionierts (meistens)

    PS: ich lasse auf der Konsole einmal composer install laufen

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

    Standard

    Zitat Zitat von henrysecond Beitrag anzeigen
    Hallo zonky und Spooky,

    vielen Dank für die Rückmeldung!

    Allein: Die Meldung "da bin ich" erscheint nicht.
    Hast du nun composer install ausgeführt oder nicht? ("Abhängigkeiten installieren")
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard composer install ausgeführt

    Ja, ich habe den composer install ausgeführt und ich kann keine Verbesserung feststellen.
    Ich möchte gerne bestätigt bekommen, dass ich das Verzeichnis richtig gewählt habe.
    Hier eine Abbildung meines Installationverzeichnisses:

    [myDomain]
    - [app]
    - [assets]
    - [config]
    - [contao]
    - [contao-manager]
    - [files]
    - [src]
    __________- [EventListener]
    _______________________PrepareFormDataListener.php
    - [system]
    - [templates]
    - [var]
    - [vendor]
    - [web]

    verzeichnis.png
    Geändert von henrysecond (05.09.2022 um 15:30 Uhr)

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

    Standard

    Sieht korrekt aus. Poste den Code.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard

    PHP-Code:
    // src/EventListener/PrepareFormDataListener.php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\CoreBundle\Slug\Slug;
    use 
    Contao\Form;
    use 
    Doctrine\DBAL\Connection;

    /**
     * @Hook("prepareFormData")
     */
    class PrepareFormDataListener
    {
        
    // Change these variables for your form, calendar and author
        
    private const FORM_ID 16;
        private const 
    CALENDAR_ID 13;
        private const 
    AUTHOR_ID 21;

        private 
    $slug;
        private 
    $db;

        public function 
    __construct(Slug $slugConnection $db)
        {
            
    $this->slug $slug;
            
    $this->db $db;
        }

        public function 
    __invoke(array &$submittedData, array $labels, array $fieldsForm $form): void
        
    {
            
    dd('da bin ich');
            
    // Check if this is the right form
            
    if (self::FORM_ID !== (int) $form->id) {
                return;
            }

            
    // Mandatory fields
            
    $submittedData['pid'] = self::CALENDAR_ID;
            
    $submittedData['author'] = self::AUTHOR_ID;

            
    // Set this to false, if newly created events should not be immediately published
            
    $submittedData['published'] = false;

            
    // Generate unique alias
            
    $submittedData['alias'] = $this->getSlug($submittedData['title']);

            
    // Convert and set date fields
            
    $submittedData['startDate'] = strtotime(trim($submittedData['startDate'])) ?: null;
            
    $submittedData['startTime'] = $submittedData['startDate'];

            
    // Optional fields
            
    if (!empty(trim($submittedData['endDate']))) {
                
    $submittedData['endDate'] = strtotime(trim($submittedData['endDate'])) ?: null;
                
    $submittedData['endTime'] = $submittedData['endDate'];
            } else {
                
    $submittedData['endDate'] = null;
                
    $submittedData['endTime'] = null;
            }
        }

        private function 
    getSlug(string $textstring $locale 'de'string $validChars '0-9a-z'): string
        
    {
            
    $options = [
                
    'locale' => $locale,
                
    'validChars' => $validChars,
            ];
            
            
    $duplicateCheck = function (string $slug): bool {
                return 
    $this->db->fetchOne('SELECT COUNT(*) FROM tl_calendar_events WHERE alias = ?', [$slug]) > 0;
            };

            return 
    $this->slug->generate($text$options$duplicateCheck);
        }


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

    Standard

    gibts kein

    PHP-Code:
    <?php
    in der ersten Zeile?

  11. #11
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard Ich fühle mich verarscht

    Wer kann die fehlende Zeile in das oben genannte Beispiel einfügen, damit Leute meines Schlages nicht so in die Irre geführt werden?

    Hier der funktionierende Code:
    PHP-Code:
    <?php
    // src/EventListener/PrepareFormDataListener.php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\CoreBundle\Slug\Slug;
    use 
    Contao\Form;
    use 
    Doctrine\DBAL\Connection;

    /**
     * @Hook("prepareFormData")
     */
    class PrepareFormDataListener
    {
        
    // Change these variables for your form, calendar and author
        
    private const FORM_ID 16;
        private const 
    CALENDAR_ID 13;
        private const 
    AUTHOR_ID 21;

        private 
    $slug;
        private 
    $db;

        public function 
    __construct(Slug $slugConnection $db)
        {
            
    $this->slug $slug;
            
    $this->db $db;
        }

        public function 
    __invoke(array &$submittedData, array $labels, array $fieldsForm $form): void
        
    {
            
    //dd('da bin ich');
            // Check if this is the right form
            
    if (self::FORM_ID !== (int) $form->id) {
                return;
            }

            
    // Mandatory fields
            
    $submittedData['pid'] = self::CALENDAR_ID;
            
    $submittedData['author'] = self::AUTHOR_ID;

            
    // Set this to false, if newly created events should not be immediately published
            
    $submittedData['published'] = false;

            
    // Generate unique alias
            
    $submittedData['alias'] = $this->getSlug($submittedData['title']);

            
    // Convert and set date fields
            
    $submittedData['startDate'] = strtotime(trim($submittedData['startDate'])) ?: null;
            
    $submittedData['startTime'] = $submittedData['startDate'];

            
    // Optional fields
            
    if (!empty(trim($submittedData['endDate']))) {
                
    $submittedData['endDate'] = strtotime(trim($submittedData['endDate'])) ?: null;
                
    $submittedData['endTime'] = $submittedData['endDate'];
            } else {
                
    $submittedData['endDate'] = null;
                
    $submittedData['endTime'] = null;
            }
        }

        private function 
    getSlug(string $textstring $locale 'de'string $validChars '0-9a-z'): string
        
    {
            
    $options = [
                
    'locale' => $locale,
                
    'validChars' => $validChars,
            ];
            
            
    $duplicateCheck = function (string $slug): bool {
                return 
    $this->db->fetchOne('SELECT COUNT(*) FROM tl_calendar_events WHERE alias = ?', [$slug]) > 0;
            };

            return 
    $this->slug->generate($text$options$duplicateCheck);
        }
    }

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

    Standard

    da gab es glaube ich schon einige Diskussionen dazu deren Fazit ich nicht mehr auf dem Schirm habe... Du bist zumindest nicht der erste ;-)

  13. #13
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard Gruß

    Vielen Dank für die tröstenden Worte!
    Der <!php - Tipp war entscheidend.
    Ich stehe - derart mit Wissen ausgestattet - vor einer großen Karriere als Contao-Versteher!

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

    Standard

    PHP Dateien beginnen immer mit <?php (nur so wird der darauf folgende Text vom jeweiligen Parser auch als PHP Code interpretiert) - daher existiert das auch in keinem Beispiel.
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Du könntest die Änderung auch gern als PR einreichen - bei Github anmelden und beim Handbuch bei der entsprechenden Seite oben rechts auf den Link klicken

    Es gibt m.E. im Handbuch auch ein to-do dazu

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

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP Dateien beginnen immer mit <?php (nur so wird der darauf folgende Text vom jeweiligen Parser auch als PHP Code interpretiert) - daher existiert das auch in keinem Beispiel.
    @henrysecond => dann kannst Du Dir das sparen...

  17. #17
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard If there was a hint to create a valid PHP-File...

    The tutorial says: Create the file PrepareFormDataListener.php with the following content....
    Nobody would expect to get only part of the necessary code.
    If there was a hint how to create a valid PHP file...

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP Dateien beginnen immer mit <?php (nur so wird der darauf folgende Text vom jeweiligen Parser auch als PHP Code interpretiert) - daher existiert das auch in keinem Beispiel.***
    This kind of unspoken obviousness is sadly unhelpful.
    But oh, who am I telling.

    ***Was this a guide on parser programming or on how to use a hook?

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

    Standard

    Developing Hooks in Contao requires basic knowledge of PHP. The Contao documentation only documents various functionalities within Contao, but it is not a guide on how to learn PHP.
    » sponsor me via GitHub or PayPal or Revolut

  19. #19
    Contao-Nutzer
    Registriert seit
    07.07.2010.
    Beiträge
    12

    Standard

    I think any form of arrogance is inappropriate here.

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
  •