使用Laravel验证错误后,Dropzone中的图像会丢失

时间:2016-11-06 10:58:06

标签: php ajax laravel validation

所以,我有这个特殊的问题。

我已经制作了一个包含dropzone的表单,并且图像是通过AJAX上传的,一切都在这个角度工作(选择的图像存储,可以从框中删除)。

所以问题如下: 当我提交表单,并且发生了一些验证错误时,我上传的图像已经在服务器上,但是不显示在dropzone表单上,我必须重新上载它们,但是我只是用未填充的数据填充我的存储空间,并且在验证之前上传的图像以后的任何方法都无法访问或删除,因此它基本上是垃圾数据。

有没有办法防止这种情况发生?我想在验证错误(或刷新)之后显示已上传的图像。如果不能解决这个问题,建议我采用不同的方法。

感谢。

1 个答案:

答案 0 :(得分:0)

我设法找到了一个有效的解决方案。 我的想法是:如果有图像发布,那么使用$ validator-> failed()方法我将从服务器中删除图像。

以下是完整的代码,如果有人需要它:

// Validating the request
public function validate(Request $request){
   $rules = []; //define your rules
   $messages = []; //define your rules

   // We make new validator with request data, rules and messages
   $validator = Validator::make($request->all(), $rules, $messages);

   // Deleting images if the validator fails
   if($validator->fails()){
      if(isset($request->images)){
          foreach($request->images as $image){
             // unlink your image here
          }
      }
     return Redirect::back()->withInput()->withErrors($validator);
   }
}

然后在方法store / edit(或自定义方法)中调用:

public function store(Request $request){

   // If it fails, return the redirect we defined.
   if($this->validate($request)){
      return $this->validate($request);
   }
}

您也可以直接在store方法中定义验证器,但由于我在Controller中使用了几次,因此我为它做了一个单独的方法。如果我们想重新定位错误,我们必须返回它的值。

干杯。