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

新手上路,请多包涵

我有一个 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', 但它们都没有显示任何丢失图像的错误消息。我正在显示如下错误消息:

原文由 Ludwig 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 392
1 个回答

我知道这是一个老问题,但我在搜索过程中遇到了它。所以我也会在这里为未来的访问者发布我的解决方案。

我认为这个解决方案是 OP 想要的。该解决方案不使用其他包或自定义验证方法,因此 imo 也是一个优点。

我所做的是这样的:

 public function rules()
{
    return [
      'first_name' => ['required', 'max:50'],
      'last_name' => ['required', 'max:50'],
      'birthday' => ['required'],
      'old_image' => ['nullable'],
      'image' => [
          Rule::requiredIf(function() {
              return empty($this->request->get('old_image'));
          })
      ]
    ];
}

原文由 Refilon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题