如果图像存在于拉拉维尔中,我如何避免编辑表单中所需的图像



我正在添加和编辑具有相同功能(商店)的用户,当我添加用户时,它会询问我需要图像,但每当我编辑具有图像的用户时,它也要求我图像是必需的,我希望如果图像已经存在,它不会问我,请参阅我上面的代码,我最近根据古尔帕尔·辛格更改了我的代码

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');
        }    
    }

您可以使用有条件地添加规则 数据库中没有图像

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

这是验证规则请求

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

不要忘记导入身份验证和用户模型即

 use AppUser;
 use Auth;

欲了解更多详情,请单击此处

您通常可以执行以下操作:

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

最好将它们分开或简单地创建另一个函数。但是你可以放一个if语句,说明图像是否在请求中。

喜欢这个:

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

如果您想要用于存储,重命名,移动图像的代码,请随时请求。

你可以在钩子之后使用验证。

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();
  }
}

仅这几行就可以解决您的问题...你必须检查那里的图像有没有。

私有函数或受保护函数中的规则

  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;
}

最新更新