Felder in Formularen ausblenden, wenn Checkbox nicht angewählt wurde

  • Es gibt doch bestimmt eine Möglichkeit, dass man ein Formular-Feld ausblendet, wenn eine Checkbox nicht angewählt wurde. Oder andersherum, es soll das vorhandene Select-Feld nur angezeigt werden, wenn eine entsprechende Checkbox auch ausgewählt wird.

    Und das Ganze natürlich so, dass wenn ich auf der AddForm bin, dass erstmal nicht das Select-Field angezeigt wird, sobald ich aber dann die Checkbox anklicke, soll direkt darunter das Select-Feld eingeblendet, am besten sogar so nach unten hin auffahren und angezeigt werden.

    Wie ist sowas machbar?

    Hier mal der Teil aus dem Template:

    Es gibt sicherlich so eine Funktion, aber ich weiß gerade nicht, wie und wo...

    Vielen Dank schon mal für die Hilfe...

  • Oha... ok... das muss ich mal versuchen. Habe mir schon die Doku angeschaut... ist schon sehr umfangreich.

    Hier mal die Form-Klasse... irgendwie fehlt da aber noch das genaue Validieren und auch bestimmt noch einige Funktionen.

    MUss man da zwingend auch noch die Funktion

    Code
    protected function setFormAction()

    mit einbauen? ?

    Welche Funktionen sind hier überflüssig oder fehlen noch?

    Irgendwie finde ich auch keine genaue Beschreibung aus der Doku.

    Wo ist denn hier noch ein Fehler?

    Das automatische Auf und Zu-Klappen geht aber schon mal... ;)

  • Ich möchte die Eingabe-Werte noch Validieren. Und zwar so, wie es in dieser Validierung funktioniert:

    Und dann stellt sich mir die Frage, brauche ich keine "readFormParameters" mehr?

    Und es gibt beim Absenden genau diesen Fehler:

    Class name must be a valid object or a string

    Und das bezieht sich laut Fehler Stacktrace auf die Zeile 181 die lautet:

    Code
    public function save()


    Aber wo soll denn da der Fehler sein?


    Und wie kann ich in dem Select die einzelnen Values festlegen?

    Code
    SelectFormField::create('maxTier')
        ->label('wcf.acp.sar.ship.maxTier')
        ->options(['wcf.acp.sar.ship.tier.one', 'wcf.acp.sar.ship.tier.two', 'wcf.acp.sar.ship.tier.three'])
  • Hallo,


    nur zum Verständnis: Wieso speicherst Du das Objekt manuell und überlässt dies nicht dem FormBuilder?

    Du brauchst theoretisch nur die Methode createForm(), die Objekt-Action-Klasse setzen und der Rest passiert „automatisch“.

    Beispiel (ohne Dependency):

  • Ach? So einfach ist das?


    Ich probiere mal nur createForm ohne weiteres. Bin echt mal gespannt... :)

    Und wie kann ich die Validierung wie im oberen Beispiel mit einbauen?

  • Und wie kann ich die Validierung wie im oberen Beispiel mit einbauen?

    Beispiel:

    PHP
    TextFormField::create('processID')
                        ->label('wcf.bpmn.processID')
                        ->addValidator(new FormFieldValidator('existingProcessId', function (TextFormField $formField) {
                            if (BpmnUtil::searchForBpmn($formField->getValue()) && $formField->getValue() != $this->bpmn->processID) {
                                $formField->addValidationError(
                                    new FormFieldValidationError('alreadyExisting', 'wcf.bpmn.existsAlready')
                                );
  • Ok....

    ich habe jetzt das hier:

    und beim Absenden kommt folgender Fehler:

    Was ist denn jetzt schon wieder falsch?

  • Bist du sicher, dass public $objectActionClass = SARShipAction::class; korrekt ist?

    Ja...

    So sieht Sie aus:

  • Hallo,


    kannst Du mal versuchen die create() Methode aus der Action-Klasse zu löschen und erneut probieren das Formular zu nutzen?

    Was soll die Methode überhaupt bewirken?

    Edited once, last by itsmeJAY (April 14, 2024 at 10:02 PM).

  • Na dieAction create Funktion soll die Daten in die DB speichern...

    So habe ich es zumindest immer gemacht und bis dato hat es auch immer funktioniert. Ich lösche mal die ganze Funktion. Dann übernimmt es bestimmt wieder die Dataobject-Klasse... ;)

    Gruß
    Markus

    Mitglied aus dem Kartell...

    Das Kartell

    Edited once, last by MDMAN (April 14, 2024 at 9:46 PM).

  • Jetzt kommt komischweise eine andere Fehlermeldung:


    Das liegt wohl daran, dass das maxTier- Select-Feld nur erscheint, wenn auch typeMedic auf 1 ist. Aber warum ist der Wert dann komplett nicht dabei, statt einen Wert von " 0 " zu liefern?

    Kann man einen Default-Wert festlegen, der immer, egal ob die Abhängigkeit gegeben ist oder nicht, dann einen bestimmten Wert dann auf die Variable setzt?

  • Die hat nen Default-Wert...

  • Muss eigentlich in der Action-Klasse gar keine Funktion Create und Update mit eingebaut werden? Wenn man nicht noch irgendetwas besonderes in die DB schreiben möchte?

    Der Wert ist wirklich default = 0.

    Jetzt meckert er folgendes:

    Code
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'maxTier' cannot be null

    Kann man einen Default-Wert festlegen, der immer, egal ob die Abhängigkeit gegeben ist oder nicht, dann einen bestimmten Wert dann auf die Variable setzt?

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!