Ankündigung

Einklappen
Keine Ankündigung bisher.

Symfony 3.4 Choice Constraint Callback

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

  • Symfony 3.4 Choice Constraint Callback

    Moin zusammen,

    ich schreibe gerade ein Frontend mit einem einen mehrstufigen AJAX-Wizard auf einem Symfony-Backend und habe, nachdem alles, also u.A. Validations, SessionHandling, etc., perfekt funktioniert eine Kleinigkeit über, die ich auch mittels Google-Recherche partout nicht gelöst bekomme:

    Wie funktioniert der Callback vom Choice-Constraint?

    Meine Annotation:
    PHP-Code:
    * @Assert\Choice(
    *     
    groups={"step_four"},
    *     
    callback={"AppBundle\Directory\Class""method"},
    *     
    min=1,
    *     
    max=2,
    *     
    minMessage="test.validation.message.min",
    *     
    maxMessage="test.validation.message.max"
    * ) 
    Ich möchte bei einer ChoiceList, die auf eine ArrayCollection gemappt ist erreichen, dass der Nutzer min. 1 und max. 2 Auswahlen treffen muss. Nach einer Nachtschicht sehe ich gerade den Wald vor lauter Bäumen nicht mehr. Gebe ich es wie oben geschrieben mit rein, steht in den Logs was von wegen "Using $this when not in object context", obwohl es wie in der Doku gewünscht eine statische Methode ist.

    Hat jmd. eine Idee?


  • #2
    Das mit der statischenMethode ist seit 3.4 nicht mehr,
    wieso hast Du dein Callback nicht in der entity, so wie die Beispiele in der Docu?
    oder baust Du was auf executioncontextinterface.
    infos wären ab und an hilfreich.

    https://symfony.com/doc/3.4/referenc...lback-function

    https://symfony.com/doc/3.4/referenc.../Callback.html

    Kommentar


    • #3
      Doch, ab 3.2 kann der Callback meines Wissens nach sogar in einer externen Klasse sein.

      Davon ab, selber einen CustomCallback auf ExecutionContext zu bauen wäre eigentlich nur die Notlösung, weil das Framework ja schon alles mitbringt, was ich in diesem Fall brauch(t)e.

      Ich habe es aber "anders" gelöst, bzw. hatte wahrscheinlich einfach ein Verständnisproblem von den Wortbedeutungen:

      Da das von mir verwendete EntityField in der Doku explizit als ChoiceType nur eben für Entities bzw. deren ArrayCollections ausgewiesen wird, bin ich einfach mal davon ausgegangen, dass der gleichnamige ChoiceConstraint genau das tut, was er vorgibt bzw. was ich mir darunter vorgestellt habe.

      Ich habe es zudem probiert, ihn nicht über Annotation, sondern direkt im FormType einzubauen - keine Chance. Egal ob über die "callback"- oder die "choices"-Option, ganz egal ob eine ArrayCollection oder ein normales Array, er schmiert ohne für mich nachvollziehbare Gründe ab.

      Vermutung: Der ChoiceConstraint ist ausdrücklich nur für simple Datentypen, die hinter Radio- oder Checkbox-Feldern liegen, nicht aber für Objekte. Leider steht dies nirgendwo in der Doku, bzw. ich habe es schlichtweg überlesen.

      Jedenfalls tut der CountConstraint genau das, was ich wollte - dort steht in der Doku auch explizit, dass er für ArrayCollections gedacht ist, das oben zum Choice-Constraint habe ich dann daraus geschlossen, in der Doku steht zumindest nichts.

      Kommentar


      • #4
        Wenn du überprüfen möchtest dass der Benutzer mindestens 1 und maximal 2 Auswahlen getroffen hat, dann kannst du doch einfach die Count-Constraint nutzen?
        "Software is like Sex, it's best if it's free." - Linus Torvalds

        Kommentar


        • #5
          Lol, das habe ich doch geschrieben, das ich genau dies letztlich getan habe.

          Kommentar


          • #6
            Ups sorry, hatte gelesen dass das ChoiceConstraint genau das tut was du wolltest. Hatte mich schon gewundert.

            Bzgl. des Fehlers "$this in object context": Hast du $this in der Callback Methode genutzt?
            "Software is like Sex, it's best if it's free." - Linus Torvalds

            Kommentar

            Lädt...
            X