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'); } }
5 Réponses :
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; }
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
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
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?
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.
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
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(); } }
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; }