我有一个Laravel 5.3应用程序和一个更新表单,我发送用户配置文件值.其中一个是用户图像,我正在为它创建一个隐藏的输入字段,所以如果用户没有上传任何新图像,我仍然可以看到他有隐藏字段和旧图像值.
如果他删除图像,隐藏的输入值将变为空.
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',
没有显示任何错误信息丢失图像.我正在显示如下错误消息:
您可以使用两个规则
'image' => 'required_if:old_image,' // yes, nothing after comma
要么:
'image' => 'required_without:old_image,'
这可以通过required_without
规则来完成,如果它不起作用,请显示实际的样本请求数据(dd(request()->all() )
)和您正在使用的验证规则.您想要捕获的方案很简单:如果两个字段都为空.
在您的示例中,应用此规则应该有效:
return [ // ... 'image' => 'required_without:old_image' ];
required_without:FOO,酒吧,...
验证字段必须存在,并且仅当不存在任何其他指定字段时才为空. 验证 - 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."]]