Laravel:仅在DOM中可用时验证输入

Laravel:仅在DOM中可用时验证输入,laravel,validation,vuejs2,axios,Laravel,Validation,Vuejs2,Axios,我创建了一个包含以下字段的表单: 名字 电子邮件 国家 城市 地址 如果用户选择了一个有州的国家(例如美国),则表格转换为: 名字 电子邮件 国家 陈述 城市 地址 为了验证这一点,我创建了一个单独的表单请求,如下所示: public function rules() { return [ 'name' => 'required|max:255', 'email' => 'required|email, 'country_id' =

我创建了一个包含以下字段的表单:

  • 名字
  • 电子邮件
  • 国家
  • 城市
  • 地址
如果用户选择了一个有州的国家(例如美国),则表格转换为:

  • 名字
  • 电子邮件
  • 国家
  • 陈述
  • 城市
  • 地址
为了验证这一点,我创建了一个单独的表单请求,如下所示:

public function rules()
{
    return [
      'name' => 'required|max:255',
      'email' => 'required|email,
      'country_id' => 'required|integer',
      'state_id' => 'nullable|integer',
      'city_id' => 'required|integer',
      'address' => 'required',
    ];
}
问题是,如果我这样离开它,那么如果我不选择一个状态,它将通过验证

如果我成功了:

'state_id' => 'sometimes|nullable|integer',
然后再次通过验证

如果我成功了:

'state_id' => 'required|nullable|integer',
它不会通过验证,但如果表单中没有状态字段,它将再次抛出验证错误

我读了很多关于这方面的文章,但似乎没有什么能帮我解决这个问题

PS1:我想在表单请求中解决这个问题,而不是在控制器中。我认为

if($request->has('states')){...}
我可以帮忙,但我还是想保持表格中的一切整洁

PS2:我正在使用VueJS和Axios从表单中添加/删除状态。整个表单实际上是一个Vue组件

有什么线索吗


提前谢谢你

您可以通过
验证程序
上的
有时
方法有条件地添加规则

$v->sometimes('state_id', 'required|integer', function ($input) {
    return in_array($input->countries, [1,2,3,4...]
});
您可以将
required_与
参数行一起使用,但由于验证基于输入值而不仅仅是存在,因此自定义验证规则可能是您的最佳选择


Per

谢谢您的帮助。我会尝试一下,然后回来汇报!