Laravel:仅在DOM

时间:2018-12-20 13:06:21

标签: laravel validation vuejs2 axios

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

  • 名称
  • 电子邮件
  • 国家
  • 城市
  • 地址

如果用户选择一个有州(例如美国)的国家,则该表格将转换为:

  • 名称
  • 电子邮件
  • 国家
  • 状态
  • 城市
  • 地址

为了验证这一点,我创建了一个单独的表单请求,如下所示:

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组件。

有任何线索吗?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过sometimes上的Validator方法有条件地添加规则。

$v->sometimes('state_id', 'required|integer', function ($input) {
    return in_array($input->countries, [1,2,3,4...]
});

您可以使用required_with行参数,但是由于验证是基于输入的值而不是仅基于状态,因此自定义验证规则可能是最好的选择。

https://laravel.com/docs/5.7/validation#conditionally-adding-rules