Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: Formulardaten für Event speichern

  1. #1
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.849
    Contao-Projekt unterstützen

    Support Contao

    Standard Formulardaten für Event speichern

    Hallo,

    ich beziehe mich auf die Anleitung 'Formulardaten speichern'
    Ich hätte nun versucht das Beispiel I nachzustellen, scheitere aber ...

    • lasse ich das EndDatum frei, also füge ich im Formular nichts ein, dann Fehler:
    Code:
    [2021-09-24 10:29:50] request.INFO: Matched route "tl_page.15". {"route":"tl_page.15","route_parameters":{"_token_check":true,"_controller":"Contao\\FrontendIndex::renderPage","_scope":"frontend","_locale":"de","pageModel":"[object] (Contao\\PageModel: {})","parameters":"","_route":"tl_page.15"},"request_uri":"http://dev49.local/events-list.html","method":"POST"} []
    [2021-09-24 10:29:50] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
    [2021-09-24 10:29:50] request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\DriverException: "An exception occurred while executing 'INSERT INTO tl_calendar_events (`tstamp`, `title`, `startDate`, `endDate`) VALUES (1632479390, 'ssssss', 1635199200, '')':  SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'endDate' at row 1" at C:\laragon\www\dev49\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\AbstractMySQLDriver.php line 128 {"exception":"[object] (Doctrine\\DBAL\\Exception\\DriverException(code: 0): An exception occurred while executing 'INSERT INTO tl_calendar_events (`tstamp`, `title`, `startDate`, `endDate`) VALUES (1632479390, 'ssssss', 1635199200, '')':\n\nSQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'endDate' at row 1 at C:\\laragon\\www\\dev49\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Driver\\AbstractMySQLDriver.php:128, Doctrine\\DBAL\\Driver\\PDO\\Exception(code: HY000): SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'endDate' at row 1 at C:\\laragon\\www\\dev49\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Driver\\PDO\\Exception.php:18, PDOException(code: HY000): SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'endDate' at row 1 at C:\\laragon\\www\\dev49\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Driver\\PDOConnection.php:137)"} []
    • Enddatum ist befüllt und Absendebutton geklickt » es gibt keinen neuen Eintrag im Kalender

    Im Frontend habe ich keinen Login eingefügt und im Backend bin ich als Benutzer eingeloggt, sodass ich meine AUTHOR_ID = 1 vergeben habe.

    Was mache ich falsch?
    Grüsse
    Bernhard


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

    Standard

    Zitat Zitat von derRenner Beitrag anzeigen
    Was mache ich falsch?
    u. U. nichts, aber evt. muss die Anleitung nochmal mit Strict Mode getestet werden.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.849
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Um sicher zu gehen, dass bei mir Lokal auch Strict Mode läuft, habe ich noch die entsprechende config.yml mit erstellt.
    » gleiches Ergebnis wie besprieben ...
    Grüsse
    Bernhard


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

    Standard

    Ja wenn dann tritt dieser Fehler ja nur im Strict Mode auf und eben nicht ohne Strict Mode (also der erste von dir beschriebene Fehler).
    » sponsor me via GitHub or PayPal or Revolut

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

    Standard

    Also ich konnte bei mir tatsächlich keinen Fehler feststellen. Poste mal den Code deines Hooks.
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Community-Moderator & Contao-Urgestein Avatar von derRenner
    Registriert seit
    23.10.2012.
    Ort
    hoRn|waldviertel
    Beiträge
    2.849
    Contao-Projekt unterstützen

    Support Contao

    Standard

    eigentlich eine 1:1 Kopie der Anleitung

    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 5;
        private const 
    CALENDAR_ID 1;
        private const 
    AUTHOR_ID 1;

        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
        
    {
            
    // 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']));
            
    $submittedData['startTime'] = $submittedData['startDate'];

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

        public function 
    getSlug(string $textstring $locale 'de'string $validChars '0-9a-z'): string
        
    {
            
    $options = [
                
    'locale' => $locale,
                
    'validChars' => $validChars,
            ];

            
    $duplicateCheck = function (string $slug): bool {
                return 
    $this->slugExists($slug);
            };

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

        private function 
    slugExists(string $slug): bool
        
    {
            return !empty(
    $this->db->fetchAllAssociative('SELECT * FROM tl_calendar_events WHERE alias = ?', [$slug]));
        }
    }
    Im Formular habe ich als Tabelle 'tl_calendar_events ausgewählt, aber sonst keine weitere Schritte dazu gemacht - oder müsste ich für diese Stelle noch eine DCA-Anpassung machen? Falls ja, wäre das auch noch einen Eintrag zusätzlich dazu im Dokubeitrag wert
    Grüsse
    Bernhard


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
  •