Laravel лимит проверки формы, количество изображений при обновлении - PullRequest
0 голосов
/ 06 августа 2020

Мне нужна проверка формы, чтобы ограничить количество изображений (5) на элемент. Моя проверка работает, когда я добавляю новый элемент, но не работает во время обновления. при обновлении он может добавить более 5 изображений. вот мой код -

Контроллер

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

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вы должны проверить количество доступных изображений перед проверкой, например:

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();
}
0 голосов
/ 06 августа 2020

Проблема в вашем коде. Когда вы вставляете данные, они содержат 5 изображений, имена которых сохраняются в базе данных. Теперь при обновлении вы снова принимаете новые изображения. Это не проблема, потому что когда вы вставили данные, вы, вероятно, получили только 3 изображения. Таким образом, вы можете разрешить пользователям обновлять базу данных еще двумя изображениями. Но для этого вы должны проверить базу данных, прежде чем сохранять изображения при обновлении.

Итак, согласно 1-й части вашего кода

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

Итак, во 2-й части кода необходимо изменить следующим образом

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, чтобы разрешить выбор определенного количества файла для загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...