我有一个表单,它的输入数量根据用户的行数而灵活。
| row | FullName | Phone | Email |
|------------------------------------------ |
| 1 | Alex | 06 | a@a.com |
|------------------------------------------ |
| 2 | Bob | 968 | |
|------------------------------------------ |
| 3 | | | j@j.com |
---------------------------------------------
_____________________
| Add new User Button |
---------------------
当填写每个用户的任何输入时,需要这些用户的其他输入。
例如:第2行有错误,因为填写了全名和电话,但电子邮件是空的
或
第3行出现错误,因为全名和电话为空,但电子邮件已填充。
所以我写了验证规则如下:
$validator = Validator::make($request->all(), [
'User.*.FullName' => 'required_with:User.*.Phone | required_with:User.*.Email',
'User.*.Phone' => 'required_with:User.*.FullName | required_with:User.*.Email',
'User.*.Email' => 'required_with:User.*.FullName | required_with:User.*.Phone',
], $this->messages());
每个用户的输入参数数量很大,我在这里列出了3种情况(全名、电话、电子邮件(。
如果我像上面那样编写验证,代码就会很混乱。如何重构这些代码,或者为这些类型的验证提供任何想法?
就像我在这条消息中说的那样;
Laravel有一个很棒的表单请求验证系统。我强烈建议使用它,而不是在控制器中使用所有验证逻辑。
这个场景看起来和我之前回答的问题一样。当我的验证像这样复杂时,我个人认为最好使用表单请求。因为它更容易阅读和管理。
事实上,你不需要这样写你的规则;
required_with:User.*.Phone | required_with:User.*.Email
required_with可以取多个参数,当其中一个参数不为空时需要;
'User.*.FullName' => 'required_with:User.*.Phone,User.*.Email',
注意:如果两个参数都不为空,则检查required_with_all。