2017-10-10 1 views
2

J'ai créé une règle de validation pour le formulaire d'image.Laravel 5.5 règle de validation de demande de formulaire conditionnel à la mise à jour

Cela fonctionne très bien sur la méthode de stockage, mais je ne veux pas que le champ image soit requis à la mise à jour car je ne peux que mettre à jour le titre par exemple.

class ImageRequest extends Request 
{ 
    /** 
    * Rules array 
    */ 
    protected $rules = [ 
     'title' => 'required|string|between:3,60', 
     'alt' => 'sometimes|string|between:3,60', 
     'image' => 'required|image|max:4000|dimensions:min_width=200,min_height=200', 
    ]; 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return $this->rules; 
    } 
} 

Pour unique de validation, nous pouvons ajouter des conditions de requête personnalisée:

'email' => Rule::unique('users')->ignore($user->id, 'user_id') 

ou

'email' => Rule::unique('users')->where(function ($query) { 
    return $query->where('account_id', 1); 
}) 

Est-ce une manière propre à obtenir quelque chose de similaire pour nécessaire?

Appliquer requis uniquement pour les nouvelles images.

+0

s'il vous plaît accepter toute la réponse qui a résolu votre problème pour fermer cette question et upvote/toute réponse qui a aidé à résoudre votre problème –

Répondre

-2

J'ai trouvé une solution.

J'ai été renommé image en fichier.

La route est homestead.app/images/1 sur mise à jour et ferme.app/images sur magasin de sorte que la l'image $ propriété sera $ this-> image = 1 sur mise à jour et $ this-> image = null sur magasin.

class ImageRequest extends Request 
{ 
    /** 
    * Rules array 
    */ 
    protected $rules = [ 
     'title'=> 'required|string|between:3,60', 
     'alt' => 'sometimes|string|between:3,60', 
     'file' => [ 
      'image', 
      'max:4000', 
      'dimensions:min_width=200,min_height=200', 
     ], 
    ]; 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     $this->rules['file'][] = is_null($this->image) ? 'required' : 'sometimes'; 

     return $this->rules; 
    } 
} 
2

vous pouvez utiliser l'instruction switch à l'intérieur règle

public function rules() 
    { 

     switch ($this->method()) { 
      case 'GET': 
      case 'DELETE': { 
       return []; 
      } 
      case 'POST': { 

         return [ 
          'first_name'=>'required', 
          'last_name'=>'required', 
         'email'=>'required|email|unique:users,email,'.$this->id, 
          'password'=>'', 
          'dob'=>'required', 
          'phone_one'=>'required', 
          'phone_two'=>'required', 
          //'user_role'=>'required', 
         // 'profile_image'=>'required' 
         ]; 
      } 
      case 'PUT': 
      case 'PATCH': { 
       return [ 

       ]; 
      } 
      default:break; 
     } 

vous pouvez utiliser condtion comme sur la mise à jour yuo ont id si sur cette base, vous pouvez également vérifier si la mise à jour ou insérer depuis l'insertion sur vous n'avez pas id si

0

Créer une autre classe qui étend la classe de demande, DI que dans votre mise à jour de l'action contrôleur

class UpdateImageRequest extends Request 
{ 
    /** 
    * Rules array 
    */ 
    protected $rules = [ 
     'title' => 'required|string|between:3,60', 
     'alt' => 'sometimes|string|between:3,60' 
    ]; 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return $this->rules; 
    } 
} 
+0

Oui, c'est la solution de sauvegarde (y compris: « image » => ' parfois | image | max: 4000 | dimensions: min_width = 200, min_height = 200 ') mais j'espérais réutiliser la même classe de validation en utilisant quelque chose comme: Rule :: sometimes (' required ', function ($ query) { return $ query-> where ('image_id', 1); }); –

+0

vous pouvez étendre à partir de cette classe la classe normale vous ne modifiez que les règles – madalinivascu

0

bien meilleure façon est d'utiliser nullable en l aravel 5.5

validation

Ref Docs

Le champ en cours de validation peut être nul. Ceci est particulièrement utile lors de la validation de primitives telles que les chaînes et les entiers qui peuvent contenir des valeurs nulles.

class ImageRequest extends Request 
{ 
    /** 
    * Rules array 
    */ 
    protected $rules = [ 
     'title' => 'required|string|between:3,60', 
     'alt' => 'nullable|string|between:3,60', 
     'image' => 'nullable|image|max:4000|dimensions:min_width=200,min_height=200', 
    ]; 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return $this->rules; 
    } 
} 

Cependant j'ai utilisé récemment avec l'image et cela a fonctionné comme un charme pour moi. Essaie!

0

La manière la plus simple dans ce cas dans l'autre sens. Par défaut ont des règles pour la mise à jour et si son ajout en magasin est requis comme suit:

class ImageRequest extends Request 
{ 
    /** 
    * Rules array 
    */ 
    protected $rules = [ 
     'title' => 'required|string|between:3,60', 
     'alt' => 'sometimes|string|between:3,60', 
     'image' => 'image|max:4000|dimensions:min_width=200,min_height=200', 
    ]; 

    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     $rules = $this->rules; 

     if ($this->isMethod('POST')) { 
      $rules['image'] = 'required|' . $rules['image'] 
     } 

     return $rules; 
    } 
}