web-dev-qa-db-fra.com

Laravel règles de validation si vide

J'ai une application Laravel 5.3 et un formulaire de mise à jour où j'envoie les valeurs du profil de l'utilisateur. L’un d’eux est également l’image d’utilisateur. Je crée un champ de saisie masqué. Par conséquent, si l’utilisateur ne télécharge aucune nouvelle image, je peux toujours voir qu’il possède le champ masqué avec l’ancienne valeur d’image. 

<input type="hidden" class="form-control" name="old_image" value="{{ $player->image_filename }}" id="oldImage">

S'il supprime l'image, la valeur d'entrée masquée devient vide. 

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

C'est comment j'ai pensé mettre à jour une image d'utilisateur. Mais je ne sais pas comment configurer les règles de validation pour ce formulaire. Quelque chose qui serait semblable à ceci:

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

J'ai essayé avec 'image' => 'required_without:old_image', et aussi avec 'image' => 'required_if:old_image, null', mais aucun d'entre eux n'a montré de message d'erreur pour l'image manquante. Je montre des messages d'erreur comme ceci:

6
Marco

Vous pouvez travailler avec deux règles

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

Ou:

'image' => 'required_without:old_image,'
8
Richelly Italo

ceci peut être fait par la règle required_without; si cela ne fonctionne pas, veuillez montrer un exemple de données de demande (dd(request()->all() )) et les règles de validation que vous utilisez. le scénario que vous souhaitez capturer est simple: si les deux champs sont vides.

dans votre exemple, appliquer cette règle devrait fonctionner:

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

required_without: foo, bar, ...

Le champ en cours de validation doit être présent et ne pas être vide uniquement s'il y en a un des autres champs spécifiés ne sont pas présents . Validation - Laravel 5.3

Exemple:

$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."]]
6
Mohannad Najjar

Essaye ça 

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