Php 创建中需要Laravel请求验证映像,但更新中不需要

Php 创建中需要Laravel请求验证映像,但更新中不需要,php,laravel,laravel-validation,Php,Laravel,Laravel Validation,ProductsRequest.php代码: 这些规则适用于存储和更新方法 问题是: 我希望图像仅在商店中需要,而在更新中不需要,因为用户只需更新产品基本信息,而无需在每次更新产品时为产品选择新图像 我所尝试的: 我曾尝试创建两个不同的产品请求一个用于存储,另一个用于更新,但我知道这并不是最好的结果,因为我的代码必须是干的。使用必需的\u而不使用规则 如果数组中存在主键和名为id的元素 'image' => 'required_without:id` 如果您的数组中存在主

ProductsRequest.php代码:

这些规则适用于存储和更新方法

问题是:

我希望图像仅在商店中需要,而在更新中不需要,因为用户只需更新产品基本信息,而无需在每次更新产品时为产品选择新图像

我所尝试的:


我曾尝试创建两个不同的产品请求一个用于存储,另一个用于更新,但我知道这并不是最好的结果,因为我的代码必须是干的。

使用
必需的\u而不使用
规则

如果数组中存在主键和名为
id
的元素

'image'         => 'required_without:id`
如果您的数组中存在主键和名为
product\u id
的元素

 'image'         => 'required_without:product_id`

您可以从

获取更多详细信息,您可以在
产品请求
文件中执行此操作

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

}

这几行就可以解决你的问题。。。 你必须检查有没有像这样的图像

public function rules() {
        return [
            // All other rules
            'image' => $this->id == null ? 'required|image|mimes:'.
                trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size') : 
                'image|mimes:'.trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size')
        ];
    }
私有或受保护函数中的规则

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

如果您的路线与此类似(应该是哪条)

你会把这条路线叫做

route('products.update', $product->id);
$product->id
将在您的表单请求中可用,您可以像这样验证您的表单请求以进行创建和更新

public function rules() {
        return [
            // All other rules
            'image' => $this->id == null ? 'required|image|mimes:'.
                trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size') : 
                'image|mimes:'.trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size')
        ];
    }

创建资源时是否同时需要
category\u id
seasures\u id
?我了解我将随修补程序请求一起发送的
product\u id
,然后使用数组中的内容即可。我在更新方法中有
product\u id
,因此我如何使用
required\u添加
?很抱歉,您需要使用“required\u而不使用”这是我的错。问题是我在URL和我没有任何区别,除了
POST
PATCH
请求。我将尝试此解决方案
ProductRequest.php
文件中没有
$request
变量。请使用
request()->isMethod('put')
而不是
$request()->isMethod('put')
使用
request()->isMethod('put'))
大家好,欢迎来到Stack Overflow。虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
route('products.update', $product->id);
public function rules() {
        return [
            // All other rules
            'image' => $this->id == null ? 'required|image|mimes:'.
                trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size') : 
                'image|mimes:'.trans('validation_standards.images.extensions').'                         
                |max:'.trans('validation_standards.images.file_size')
        ];
    }