Laravel ignoriert, wählen Sie Eingabe-Validierung, wenn keine option ausgewählt ist

Ich habe ein Formular mit einigen Feldern, die ich überprüfen möchten mit Laravel ist validate() Methode.

public function postSomething(Request $req) {

    ...

    $this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required'
    ]);

    ...

}

Das Problem ist, dass wenn das Formular abgeschickt wird, ohne eine option aus dem select-Eingang wird ignoriert, in der Anfrage und Laravel nicht bestätigen (trotz der Tatsache, dass es Hinzugefügt wird, um den Regelsatz mit der required Gültigkeitsregel. Leere Textfelder werden korrekt validiert.

+request: ParameterBag {#42 
  #parameters: array:1 [▼
    "text_input" => ""
    "_token" => "TCDqEi2dHVQfmc9HdNf8ju1ofdUQS6MtDBpUMkl7"
  ]
}

Wie Sie sehen können, die select_input fehlt von der Anfrage Parameter, wenn es leer gelassen.

Hier ist der HTML-code für meine select-Eingang:

<select class="form-control" name="select_input">
    <option disabled selected>Please select...</option>
    <option value="val1">Value 1</option>
    <option value="val2">Value 2</option>
</select>

Gibt es eine Möglichkeit, um die Validierung für alle Felder vom Regelsatz, auch wenn einige von Ihnen sind nicht in der Anfrage?

Vom Laravel 5.1 Validierung Dokumentation:

erforderlich

Bereich unter Validierung vorhanden sein muss, die input-Daten und nicht leer. Ein Feld ist als „leer“, ist eine der folgenden Bedingungen erfüllt sind:
Der Wert null ist.
Der Wert ist eine leere Zeichenfolge.
Der Wert ist ein leeres array oder leer Zählbaren Objekt.
Der Wert ist eine hochgeladene Datei ohne Pfad.

P. S. ich bin mit Laravel 5.1, so present Methode ist nicht verfügbar.

  • zeigen Sie Ihren HTML-code
  • Es wird nicht helfen, weil es ist ein erwartetes Verhalten, das null Eingänge sind nicht in der Anforderung enthalten Körper. Es passiert für radio-Eingängen und Checkboxen als gut.
  • zeigen Sie Ihre Klinge Vorlage.
  • hinzufügen value="" zu <option disabled selected>Please select...</option> und Ihre Regel sollten sieht aus wie 'select_input' => 'required|in:val1,val2' 😉
  • Ich habe versucht, vor, aber es scheint, dass jede Validierung wird ignoriert, die für das Feld, denn es ist nicht im request-Parameter. Scheint, dass nur die present validation-Methode von Laravel 5.2 funktionieren würde, aber leider kann ich nicht aktualisieren Sie das Projekt auf eine neuere version, denn es gibt eine Menge Dinge, die ich ändern muss…
  • Ich denke, wenn Sie hinzufügen value="" auf die option tag-es wird apear in der Anfrage iputs und versuchen, es ohne die disabled zu prüfen !!
  • Ich versuchte value=““ und deaktiviert, beide arbeiten gut für mich für die erforderliche Validierung.

InformationsquelleAutor Eseth | 2017-09-25



3 Replies
  1. 4

    Ihres html sollte so Aussehen

    <select class="form-control" name="select_input">
        <option value="" selected >Please select...</option>
        <option value="val1">Value 1</option>
        <option value="val2">Value 2</option>
    </select>
    
    $this->validate($req, [
            'text_input' => 'required',
            'select_input' => 'required',
        ]);

    Wenn Ihr select-box-Werte Ganzzahlen sind, dann
    Sie können required mit integer wie

    $this->validate($req, [
        'text_input' => 'required',
        'select_input' => 'required|integer',
    ]);

    Oder wenn Sie nur über begrenzte Optionen für das select-Feld können Sie dann

    'select_input' => "required|in:val1,val2,val3",
    • Hat nicht funktioniert, Gabel mir. 🙁
    • ist Ihr Wert die Optionen sind string? Wenn ja, dann verwenden Sie required|string
    • Ja, die Werte sind strings, aber immer noch scheint, dass die validate – Methode ignoriert alle Eingaben, die nicht in der Anforderung enthalten sind.
    • ändern Sie Ihre html-als ich Hinzugefügt, um meine Antwort
    • Es funktioniert in der Tat ohne die disabled Attribut und der Wert leer. 🙂
  2. 1

    Du es geschafft hast die option deaktiviert, so wird es nicht senden Sie alles durch Ihre form.

    Ändern der select-box zu

    <select class="form-control" name="select_input">
        <option value="">Please select...</option>
        <option value="val1">Value 1</option>
        <option value="val2">Value 2</option>
    </select>
    • Ich vergaß zu erwähnen, dass ich benutze Laravel 5.1 die nicht enthält diese überprüfung leider in der Regel.
    • Teilen Sie die select-box in html Ihre Frage
  3. 1

    Gibt es einige Optionen, die ich empfehlen kann:

    • Manuell die Anforderung überprüfen, ohne mit der extended validation im Controller, I. e:

      //validator FACADE
      $ validator = Validator::make ($request->all(), [
          //rules here
      ]);

      Durch diese können Sie kontrollieren, welche Felder übergeben werden und die man nicht bestanden sind.

    • Zweitens, legen Sie einen Standardwert für die select-Liste und überprüfen Sie diesen Wert, wenn Sie die Validierung im Controller, das ist, wenn Sie dieses default-Wert, dann ist nichts ausgewählt. Sie wird definitiv nur die Felder vorgelegt, in dem Controller.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.