2017-01-23 8 views
0

Ich habe eine Laravel 5.3 App und ein Update-Formular, wo ich Benutzerprofilwerte senden. Einer von ihnen ist auch Benutzerbild, ich erstelle ein verstecktes Eingabefeld dafür, wenn der Benutzer also kein neues Bild hochlädt, kann ich immer noch sehen, dass er das versteckte Feld mit dem alten Bildwert hat.Laravel Validierungsregeln, wenn Feld leer ein anderes Feld erforderlich

Wenn er das Bild entfernt, wird der versteckte Eingabewert leer.

document.getElementById('oldImage').value = ''; 

So dachte ich, ein Benutzerbild zu aktualisieren. Aber ich weiß nicht, wie man Validierungsregeln für dieses Formular einrichtet. Etwas, das in etwa so sein würde:

public function rules() 
    { 
     return [ 
      'first_name' => 'required|max:50', 
      'last_name' => 'required|max:50', 
      'birthday' => 'required', 
      'image' => required if old_image empty 
     ]; 
    } 

Ich habe versucht, mit 'image' => 'required_without:old_image', und auch mit 'image' => 'required_if:old_image, null', aber keiner von ihnen zeigte eine Fehlermeldung für fehlendes Bild. Ich zeige Fehlermeldungen wie folgt aus:

+0

http://stackoverflow.com/questions/41697979/ Laravel-5-3-verwenden-benutzerdefinierte Validierung/41698396 # 41698396 – Bugfixer

+0

oder Sie können, wenn Bedingung in Regel – Bugfixer

+0

können Sie Required_if Validierungsregel verwenden. Siehe: https://laravel.com/docs/5.3/validation – mith

Antwort

1

Versuchen Sie, diese

if (empty($request->input('old_image'))){ 
    $this->validate($request, [ 
     'image' => 'required', 
    ]); 
} 
else { 
    // Validation in case of else goes here 
    $this->validate($request, [ 
     // rule 
    ]); 
} 
+0

Das ist, was ich oben im Kommentar gesagt habe, – Bugfixer

+1

Es gibt eine Laravel-Wrapper dafür; ['$ request-> hat ('old_image')'] (https://laravel.com/docs/5.1/requests#retrieving-input) – devk

1

dies kann durch required_without Regel erfolgen, wenn es nicht funktioniert bitte eine tatsächliche Probe Anforderungsdaten zeigen (dd(request()->all())) und die Validierungsregeln Sie sind verwenden. Das Szenario, das Sie fangen möchten, ist einfach: Wenn beide Felder leer sind.

in Ihrem Beispiel, sollte die Anwendung diese Regel arbeiten:

return [ 
      // ... 
      'image' => 'required_without:old_image' 
     ]; 

required_without: foo, bar, ...

Das Feld unter Validierung nur vorhanden und nicht leer sein muss, wenn ein der anderen angegebenen Felder sind nicht vorhanden. Validation - Laravel 5.3

Beispiel:

$rules = [ 
     'new_value' => 'required_without:old_value' 
     ]; 

validator(
     ['new_value' =>'', 
     'old_value' => 'old value is preserved here'] 
    , $rules)->errors()->toArray(); 

// output: [] <-- no errors! 

validator(
     ['new_value' =>'New value!', 
     'old_value' => ''] 
    , $rules)->errors()->toArray(); 

// output: [] <-- no errors! 

validator(
     ['new_value' =>'', 
     'old_value' => ''] 
    , $rules)->errors()->toArray(); 

// output: ["new_value" => ["The new value field is required when old value is not present."]] 
+0

Dies sollte die akzeptierte Antwort sein. Einige Integrationen mit Laravel-Regeln erfordern eine Array-Konfiguration (z. B. Folklore GraphQL), und jede nicht-reine Validierung ist nicht ausreichend. – kirgy

0

Sie können mit zwei Regeln arbeiten

'image' => 'required_if:old_image,' // yes, nothing after comma 

Oder:

'image' => 'required_without:old_image,' 
Verwandte Themen