我有一个Laravel 5.3应用程序,以及我发送用户个人资料值的更新表单。其中一个是用户图像,我正在为它创建一个隐藏的输入字段,所以如果用户没有上传任何新图像,我仍然可以看到他有隐藏字段和旧图像值。
<input type="hidden" class="form-control" name="old_image" value="{{ $player->image_filename }}" id="oldImage">
如果删除图像,隐藏的输入值将变为空。
document.getElementById('oldImage').value = '';
这就是我想要更新用户图像的方法。但我不知道如何为该表单设置验证规则。与此类似的东西:
public function rules()
{
return [
'first_name' => 'required|max:50',
'last_name' => 'required|max:50',
'birthday' => 'required',
'image' => required if old_image empty
];
}
我尝试使用'image' => 'required_without:old_image',
和'image' => 'required_if:old_image, null',
,但没有一个显示错误图片的错误消息。我正在显示如下错误消息:
答案 0 :(得分:10)
您可以使用两个规则
'image' => 'required_if:old_image,' // yes, nothing after comma
或者:
'image' => 'required_without:old_image,'
答案 1 :(得分:6)
这可以通过required_without
规则来完成,如果它不起作用,请显示实际的样本请求数据(dd(request()->all() )
)以及您正在使用的验证规则。你想要捕捉的场景很简单:如果两个字段都是空的。
return [
// ...
'image' => 'required_without:old_image'
];
required_without:FOO,酒吧,...
验证字段必须存在且仅在任何情况下不为空 其他指定字段不存在。 Validation - Laravel 5.3
示例:
$rules = [
'new_value' => 'required_without:old_value'
];
validator(
['new_value' =>'',
'old_value' => 'old value is preserved here']
, $rules)->errors()->toArray();
// output: [] <-- no errors!
validator(
['new_value' =>'New value!',
'old_value' => '']
, $rules)->errors()->toArray();
// output: [] <-- no errors!
validator(
['new_value' =>'',
'old_value' => '']
, $rules)->errors()->toArray();
// output: ["new_value" => ["The new value field is required when old value is not present."]]
答案 2 :(得分:1)
试试这个
if (empty($request->input('old_image'))){
$this->validate($request, [
'image' => 'required',
]);
}
else {
// Validation in case of else goes here
$this->validate($request, [
// rule
]);
}
答案 3 :(得分:1)
对于新的laravel版本,如果您需要使用required_if,则它至少需要两个参数,因此您应该像条件一样使用第二个和第三个参数。
'old_image'=>'required_if:image,=,null',
'image'=>'required_if:old_image,=,null'
答案 4 :(得分:1)
您缺少可为空验证
'old_image' => 'required'
'image' => 'required_without:old_image|nullable'
答案 5 :(得分:0)
使用这个
'image'=>'required_if:old_image,=,null'