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

2022-08-30 20:18:40

我有一个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',


答案 1

您可以使用两个规则

'image' => 'required_if:old_image'

艺术

'image' => 'required_without:old_image'

答案 2

这可以通过规则来完成,如果它不起作用,请显示实际的样本请求数据( )和您正在使用的验证规则。您要捕获的场景很简单:如果两个字段都为空。required_withoutdd(request()->all() )

在您的示例中,应用此规则应该有效:

return [
          // ...
          'image' => 'required_without:old_image'
        ];

required_without:宝贝,酒吧,...

仅当任何其他指定字段不存在时,处于验证状态的字段必须存在,而不是为空。验证 - 拉拉维尔 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."]]

推荐