2
votes

Comment puis-je éviter l'image requise dans le formulaire d'édition si l'image existe dans laravel?

J'ajoute et modifie un utilisateur avec la même fonction (Store), chaque fois que j'ajoute un utilisateur, il me demande une image est nécessaire, mais chaque fois que je modifie un utilisateur qui a une image, il me demande également une l'image est déjà présente, elle ne me le demandera pas, s'il vous plaît voir mon code ci-dessus J'ai récemment changé mon code selon Gurpal singh

In my controller
                                 

        public function rules()
{
                $child_details = Children::findOrFail($inputs['id']);
    $rules =  [
       'child_name' => 'required',
                   'gender' => 'required',
                   'dob' => 'required',
                   'current_class' => 'required',
                    'b_group' => 'required',
                    'm_tongue' => 'required', 
                    'image' => 'image',
         ];

    if ($child_details->notHavingImageInDb()){
        $rules['image'] = 'required|image';
    }
    return $rules;
 }
 
 public function Postchild(Request $request)
    {

            $data =  \Input::except(array('_token')) ;
             $validator = \Validator::make($data,$rules);
             $inputs = $request->all();
             if ($validator->fails())
            {
                    return redirect()->back()->withInput()->withErrors($validator->messages());
            }
          
              if(!empty($inputs['id'])){
                $child_details = Children::findOrFail($inputs['id']);
            }else{
                $child_details = new Children;
            }


           $child_details->parent_id = Auth::User()->id;
           $child_details->child_name = $inputs['child_name'];

           $child_image = $request->file('image');

        if($child_image){

            $tmpFilePath = 'uploads/childrens/';
             $extension =   $child_image->getClientOriginalExtension();
            $hardPath =  str_slug($inputs['child_name'], '-').'-'.md5(time());


            $img = Image::make($child_image);

            //$img->resize(180)->save($tmpFilePath.$hardPath.'-b.jpg');
            $img->fit(250, 250)->save($tmpFilePath.$hardPath.'.'.$extension);

            $child_details->image = $hardPath.'.'.$extension;

        }
         
            $child_details->save();

       
  if(!empty($inputs['id'])){


                return \Redirect()->route('child_list')->with('success', 'Child has been updated');


        }else{

                return \Redirect()->route('child_list')->with('success', 'Child has been added');


        }    

    }


0 commentaires

5 Réponses :


0
votes

Vous pouvez normalement faire comme ci-dessous:

$rule = array(
    'name' => 'required',
   );

if (!empty($inputs['id'])) {
    $user = User::findOrFail($inputs['id']);
} else {
    $rule["image"] = "required";
    $user = new User;

}


3 commentaires

j'obtiens le même problème, l'image est requise .. après avoir appliqué comme vous l'avez dit


fait comme vous l'avez dit mais lorsque j'ajoute un nouvel utilisateur, il ne me demande pas l'image requise


Je veux une image requise lors de l'ajout d'un nouvel utilisateur et lors de l'édition si l'utilisateur a une image qu'il ne nécessite pas de validation d'image



2
votes

Vous pouvez utiliser des règles d'ajout conditionnel n'ayant pas d'image dans la base de données

 use App\User;
 use Auth;

Ceci est la demande de règle de validation

public function rules()
{
    $user = User::find(Auth::id());
    $rules =  [
       'name' =>'required|max:100',
        'image' =>'image',
         ];

    if ($user->notHavingImageInDb()){
        $rules['image'] = 'required|image';
    }
    return $rules;
 }

N'oubliez pas pour importer l'authentification et le modèle utilisateur ie

Add this in model

public function notHavingImageInDb()
{
    return (empty($this->image))?true:false;
}

pour plus de détails, cliquez sur ici


5 commentaires

où dois-je ajouter du code public function rules () dans mon modèle utilisateur?


Il s'agit d'une demande de publication normale pour laquelle vous souhaitez soumettre la demande de publication.


dois-je l'utiliser au-dessus de ma fonction de publication


Comme vous l'avez dit, vérifiez s'il vous plaît la ma question ci-dessus, je reçois une erreur de règles de variables non définies


quelle est votre version laravel?



0
votes

Il vaut mieux les séparer ou simplement créer une autre fonction. Mais vous pouvez mettre une instruction if que si l'image est dans la requête ou non.

Comme ceci:

    if(! isset($data['image'])){ //if the image is not in the request

          //Your code          

    }
    else{ //if the image is in the request

         //Your code

    }

Si vous voulez un code pour stocker, renommer, déplacer une image n'hésitez pas à demander.


4 commentaires

Ma version laravel est 5.2


pouvez-vous m'envoyer le code sur upensuni@gmail.com


vérifier votre boîte de réception


Merci .. je vais l'essayer comme vous l'avez dit



0
votes

Vous pouvez utiliser la validation après le hook.

public function Postchild(Request $request)
{

   //Define your rules
   $rules =  [
           'child_name' => 'required',
           'gender' => 'required',
           'dob' => 'required',
           'current_class' => 'required',
           'b_group' => 'required',
           'm_tongue' => 'required', 
         ];

  //Validate your data       
  $data = $request->except('_token');
  $validator = \Validator::make($data,$rules);


  $validator->after(function ($validator) {

    //Check the mode of request (Create or Update)
    if(!empty($data['id'])){
        $child_details = Children::findOrFail($data['id']);
        if($child_details->image == null){
          $validator->errors()->add('image', 'Image field is required');
        }
    }
  });
  if ($validator->fails()) {
  return redirect()->back()
  ->withErrors($validator)
  ->withInput();
  }
}


0 commentaires

0
votes

Juste ces quelques lignes peuvent résoudre vos problèmes ... Vous devez vérifier si l'image a ou non.

Règles dans une fonction privée ou protégée

  private function validateRequest($request)
     {
        //This is for Update without required image, this will check that In DB image have or not

        $child_image = Children::find($request->id);
        $rules = [];
        if ($child_image) :
          if ($child_image->image == null):
             $rules['image'] = 'required|image|max:1999';
          endif;



        //This is for regular validation
        else :
          $rules = [
              'image' => 'required|image|max:1999',
           ];
       endif;
         return $rules;
}


0 commentaires