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