Ankündigung

Einklappen
Keine Ankündigung bisher.

DateTime Validierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Symfony] DateTime Validierung

    Hallo,
    ich versuche diesen Datum-String
    Code:
    2020-10-06T12:00:00+00:00
    mit dem
    Code:
    Symfony\Component\Validator\Constraints\DateTime
    zu validieren:
    PHP-Code:
    ...  
    $constraints = new Assert\Collection([
        
    'start' => [new Assert\DateTime("Y-m-d H:i:s")]
    ]);
    $errors $this->validator->validate(["start" => '2020-10-06T12:00:00+00:00'], $constraints);

    foreach (
    $errors as $error) {    
        
    var_dump($error->getMessage());

    Das gibt einen Fehler zurück
    'This value is not a valid datetime.'
    . Der String ist wie ich das sehe sauber.

    Was muß ich da als Option einstellen, damit die Validierung funktioniert?


  • #2
    Du musst das passende Format übergeben. Man sieht ja, dass dein Format nicht mit dem übereinstimmt, was du validieren möchtest:
    https://www.php.net/manual/en/dateti...fromformat.php

    Validates that a value is a valid “datetime”, meaning a string (or an object that can be cast into a string) that follows a specific format.
    https://symfony.com/doc/current/refe.../DateTime.html

    Kommentar


    • #3
      Zitat von Zeichen32 Beitrag anzeigen
      Du musst das passende Format übergeben...
      Scheint wohl ein bekanntes Problem mit Symfony und ISO 8601

      Ich hab das erstmal so gelöst:
      PHP-Code:
      $constraints = new Assert\Collection(['start' => [new Assert\DateTime("Y-m-d\TH:i:sO")]]);
      $errors $this->validator->validate(["start" => '2020-10-06T12:00:00+00:00'], $constraints);  

      foreach (
      $errors as $error) {    
          
      var_dump($error->getMessage());

      Kommentar


      • #4
        Wieso ein Problem von Symfony? Du gibst oben an dass dein DateTime String das folgende Format haben soll:"Y-m-d H:i:s" und gibst dann ein anderes Format "2020-10-06T12:00:00+00:00" an den Validator. Natürlich schlägt der Validator dann an.

        Kommentar


        • #5
          Zitat von Zeichen32 Beitrag anzeigen
          Wieso ein Problem von Symfony? ...
          Na dann gib mal das mal wie erwartet ein, dann siehst du das Problem von Symfony. Das Format im obigen Beispiel war ein Versuch, welches ich nicht wieder bereinigt hatte zum ursprünglichen Format, sorry dafür.

          Hier das "Orginal":
          PHP-Code:
          $constraints = new Assert\Collection([
              
          'start' => [new Assert\DateTime("Y-m-dTH:i:s+00:00")]
          ]);
          $errors $this->validator->validate(["start" => '2020-10-06T12:00:00+00:00'], $constraints);

          foreach (
          $errors as $error) {    
              
          var_dump($error->getMessage());

          Kommentar


          • #6
            Das ist im Grunde alles was der Validator macht:

            PHP-Code:
            \DateTime::createFromFormat($constraint->format$value);
            $errors = \DateTime::getLastErrors(); 
            Wenn man da dein Format aus #5 eingibt, kommt die folgende Fehlermeldung:
            The timezone could not be found in the database

            Kommentar


            • #7
              Zitat von Zeichen32 Beitrag anzeigen
              Das ist im Grunde alles was der Validator macht:...
              Das ist das was er benutzt. Und das ist nicht ausreichend, also hat der Validator ein Problem. Es ist auch nicht mein Format, sondern ein ISO 8601, PHP selber, stellt meines Wissens, entsprechende Möglichkeiten bereit.

              Unter dem Strich kann der Validator von Symfony mit dem Format nicht umgehen. Um dafür suchte ich eine Lösung. Die hatte ich ja nun gefunden

              Kommentar


              • #8
                Zitat von rammi Beitrag anzeigen

                Das ist das was er benutzt. Und das ist nicht ausreichend, also hat der Validator ein Problem. Es ist auch nicht mein Format, sondern ein ISO 8601, PHP selber, stellt meines Wissens, entsprechende Möglichkeiten bereit.

                Unter dem Strich kann der Validator von Symfony mit dem Format nicht umgehen. Um dafür suchte ich eine Lösung. Die hatte ich ja nun gefunden
                Was ich dir damit zeigen wollte ist, dass nicht Symfony das Problem hat, sondern PHP wenn es dein Format nicht mag. Du kannst übrigens auch die PHP Konstanten nutzen:

                PHP-Code:
                const string DateTimeInterface::ISO8601 "Y-m-d\TH:i:sO" 
                https://www.php.net/manual/de/class.datetime.php


                PHP-Code:
                $constraints = new Assert\Collection([
                    
                'start' => [new Assert\DateTime(DateTimeInterface::ISO8601)]
                ]);
                $errors $this->validator->validate(["start" => '2020-10-06T12:00:00+00:00'], $constraints);

                foreach (
                $errors as $error) {    
                    
                var_dump($error->getMessage());

                Kommentar

                Lädt...
                X