Laravel验证规则如果字段为空,则需要另一个字段

时间:2017-01-23 11:42:57

标签: php laravel validation

我有一个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',,但没有一个显示错误图片的错误消息。我正在显示如下错误消息:

6 个答案:

答案 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'