繁体   English   中英

Laravel 表单验证限制更新时的图像数量

[英]Laravel form validation limit no of images while updating

我需要表单验证来限制每个项目的图像数量(5)。 我的验证在我添加新项目时有效,但在我更新时无效。 当我更新它可以添加超过 5 个图像。 这是我的代码——

Controller

 public function store(Request $request){
    $request->validate([
                'carreg' => 'required|max:10',
                'car_image' => 'array|max:5',
            ]);
            $car = new Car;
      

                ..........................
               ............................
           $car->save();}


public function update(Request $request,id){
        $request->validate([
                    'carreg' => 'required|max:10',
                    'car_image' => 'array|max:5',
                ]);
                $car = Car::find($id);
          
                    .....................
                   ............................
               $car->save();}

问题出在您的代码中。 当您插入数据时,它包含 5 个名称保存在数据库中的图像。 现在,当您更新时,您再次接受新图像。 这不是问题,因为当您插入数据时,您可能只有 3 张图像。 因此,您可以允许用户使用另外 2 个图像更新数据库。 但要这样做,您必须在更新时存储图像之前检查数据库。

所以根据你的代码的第一部分

public function store(Request $request){
    $request->validate([
                'carreg' => 'required|max:10',
                'car_image' => 'array|max:5',
            ]);
            $car = new Car;
        ....................................
        ......Data is saving to database with 
        ......5/4/3/2/1/0 images depending on your code.......
        ...........................

           $car->save();
}

所以在你的代码的第二部分必须像这样修改

public function update(Request $request,id){
        $request->validate([
                    'carreg' => 'required|max:10',
                    'car_image' => 'array|max:5',
                ]);
                $car = Car::find($id);
          
                    .....................
                   .....Check if the car has 5/4/3/2/1/0 image in the database.
                   ..... If it has less than 5 images  
                   ......allow (5-image already uploaded) amount of images to upload
                   ..... If user has selected more than the desired amount of image,
                   ......you can upload first nth desired images or return error 
                   ......to user to upload valid amount of file ....
               
              $car->save();
 }

如果用户已经上传了 5 张图片,在编辑表单中,不显示文件上传字段(隐藏它,或者使用 if 条件在 HTML 中传播)。 您也可以使用 Javascript 允许一定数量的文件到 select 也可以上传。

您应该在验证之前检查可用图像的数量,例如:

function update(Request $request, $id)
{
    $car = Car::find($id);
    // length car_image
    $length = count($car->car_image);
    $max = 5 - $length;

    $request->validate([
        'carreg' => 'required|max:10',
        'car_image' => 'array|max:' . $max,
    ]);

    $car->save();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM