我有一个包含三个字段的表单:title
,body
和photo[]
。我试图对其进行验证,以便至少填写一个项目,但我似乎无法让它发挥作用。如果我上传文件,我仍会收到title
和body
的错误。
public function rules()
{
return [
'title' => 'required_without_all:body,photo.*',
'body' => 'required_without_all:title,photo.*',
'photo.*' => 'required_without_all:title,body',
'photo.*' => 'mimes:jpeg,gif,png',
];
}
更新:Jonathan指出我的规则错了。我已修复它们,现在正在使用它。它还没有工作;当我尝试上传照片时,我收到错误消息,其他字段是必需的。
public function rules()
{
return [
'title' => 'required_without:body,photo.*',
'body' => 'required_without:title,photo.*',
'photo.*' => 'required_without:title,body|mimes:jpeg,gif,png',
];
}
答案 0 :(得分:0)
如果您希望确保photo
字段是一个数组,那么您需要'photo' => 'array'
,然后您可以使用'photo.*' => ''
进行数组的其他验证'的孩子们。
规则由管道符|
分隔,因此如果您要在示例中将两者合并,则为'photo.*' => 'required_without_all:title,body|mimes:jpeg,gif,png',
。我没有看到你使用管道分开规则,所以我无法确定你是否知道它。
这可能是你首先出错的地方(关联数组中的两个键完全相同),某种优先权会影响否定其中一条规则。
你可以尝试这样的事情(为了记录,我认为你开始使用required_without_all
是正确的,因为这规定了如果所有给定的需要字段丢失):
public function rules()
{
return [
'title' => 'required_without_all:body,photo',
'body' => 'required_without_all:title,photo',
'photo' => 'array',
'photo.*' => 'required_without_all:title,body|mimes:jpeg,gif,png',
];
}