Изображение проверки запроса Laravel требуется при создании, но не требуется при обновлении - PullRequest
0 голосов
/ 23 ноября 2018

ProductsRequest.php код:

public function rules()
{
    return [
        'name'          => 'required
                            |min:'.trans('validation_standards.names.min').'
                            |max:'.trans('validation_standards.names.max').'
                            |unique:products,name,'.$this -> product_id,


        'barcode'       => 'size:'.trans('validation_standards.barcode.size').'
                            |unique:products,barcode,'.$this -> product_id,

        'category_id'   => 'required
                            |exists:categories,id',

        'seasons_id'    => 'required
                            |exists:seasons,id',

                           // REQUIRED IMAGE ONLY IN STORE
        'image'         => 'required
                            |image|mimes:'.trans('validation_standards.images.extensions').'
                            |max:'.trans('validation_standards.images.file_size'),

        'description'   => 'nullable
                            |min:'.trans('validation_standards.descriptions.min').'
                            |max:'.trans('validation_standards.descriptions.max'),
    ];
}

Эти правила применяются как для хранения, так и для обновления методов.

Проблема:

Я хочу, чтобы изображение требовалось только в магазине и не требовалось в update , поскольку пользователь может просто обновитьОсновная информация о продукте, не выбирая новый образ для продукта каждый раз, когда он обновляет продукт.

Что я пробовал:

Я пытался создать два разных ProductsRequest один для магазина и другой для обновления , но я знаю, что это достижение не лучшее достижение, потому что мой код должен быть СУХИМ.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Вы можете сделать это в файле ProductsRequest;

public function rules()
{
    if($request()->isMethod('put')) // could be patch as well
    {
         // Update rules here - Don't require image here
return [
    'name' => 'required
              |min:'.trans('validation_standards.names.min').'
              |max:'.trans('validation_standards.names.max').'
              |unique:products,name,'.$this->product_id,
    'barcode' => 'size:'.trans('validation_standards.barcode.size').'
                 |unique:products,barcode,'.$this->product_id,

    'category_id'   => 'required|exists:categories,id',

    'seasons_id'    => 'required|exists:seasons,id',

                       // REQUIRED IMAGE ONLY IN STORE
    'image' => 'required|image|mimes:'.
                trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size'),
    'description' => 'nullable                        
                |min:'.trans('validation_standards.descriptions.min').'                      
                |max:'.trans('validation_standards.descriptions.max'),
];
    }else{
         // store rules here - require image here
         return [
    'name' => 'required
              |min:'.trans('validation_standards.names.min').'
              |max:'.trans('validation_standards.names.max').'
              |unique:products,name,'.$this->product_id,
    'barcode' => 'size:'.trans('validation_standards.barcode.size').'
                 |unique:products,barcode,'.$this->product_id,

    'category_id'   => 'required|exists:categories,id',

    'seasons_id'    => 'required|exists:seasons,id',

                       // REQUIRED IMAGE ONLY IN STORE
    'image' => 'image|mimes:'.
                trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size'),
    'description' => 'nullable                        
                |min:'.trans('validation_standards.descriptions.min').'                      
                |max:'.trans('validation_standards.descriptions.max'),
];
    }
}

}
0 голосов
/ 28 июня 2019

Только эти несколько строк могут решить ваши проблемы ... Вы должны проверить, есть изображение или нет, как это.

Правила в частной или защищенной функции

  private function validateRequest($request)
     {
        //This is for Update without required image, this will check that In DB image have or not

        $product = Product::find($request->product_id);
        $rules = [];
        if ($product) :
           if ($product->product_image == null):
              $rules['product_image'] = 'required|image|max:1999';
           endif;



     //This is for regular validation
       else :
          $rules = [
               'category_id'   => 'required|integer|not_in:-- Select Category --',
               'product_image' => 'required|image|max:1999',
             ];
       endif;
         return $rules;
    }
0 голосов
/ 23 ноября 2018

Использовать required_without правила

Если первичный ключ и элемент с именем id существуют в вашем массиве

'image'         => 'required_without:id`

Если первичный ключ и элемент с именем product_id существуютв вашем массиве

 'image'         => 'required_without:product_id`

Более подробную информацию вы можете получить из проверки ларавеллы

...