[英]Laravel form request validation Collection
在文档中找不到有关验证 collections 的任何内容。 在 .NET Core 中,我可以创建一个 Model 并添加一些数据属性,自动将该前端列表绑定到 model,即使使用 jquery 验证也会显示所有错误。
我想用 Laravel 达到相同的结果
例如在 .NET Core 中我会有这样的东西
public class Person {
[Required]
public string Name { get; set; }
}
在我要写的 Razor 页面代码上,这给了我一个可以在我的视图中使用的变量
[BindProperty]
IList<Person> People { get; set; }
然后在我看来我会把它渲染成
@foreach(var person in Model.People)
{
<input type="text" asp-for="person.Name" />
}
这将在页面上显示 output
<input type="text" id="People_0_Name">
<input type="text" id="People_1_Name">
<input type="text" id="People_2_Name">
<input type="text" id="People_3_Name">
这将允许我在 controller 或页面上检查 model state 并自动检查列表中是否有任何错误。 一切都做得很好,很容易。
现在在 Laravel,我是新手,但我已经了解了表单请求和验证规则。
我有表格请求
class CreateContractRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'price' => 'required,
'target' => 'required',
// Want to add a collection here to like, 'people' => 'required
];
}
}
class CreatePeopleRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required'
];
}
}
在 html 我正在渲染这样的输入
@for($i = 1; $i < $personTotal; $i++)
<input type="text" id="person{{$i}}" name="person{{$i}}">
@endfor
这基本上只会呈现
<input type="text" id="person1" name="person1">
<input type="text" id="person2" name="person2">
<input type="text" id="person3" name="person3">
一切都不一样。 我知道也许我应该为 Person class 创建一个数组并将该变量发送到视图,但我没有使用模型的经验,因为我不需要访问数据库,只需与 API 通信。
总之,我只想知道如何使数组或集合更容易在 laravel 中使用,以具有验证规则?
如果有人和我有同样的问题,我发现了这个话题
但是,这个对我不起作用。 因为我正在执行 ajax 请求,而 null 属性未在请求中发送,因此present
规则将不起作用。
但是,我确实已经有一个字段,一个复选框,说明是否需要此集合。
我使用了requiredif
在我的要求下
public function rules()
{
return [
'morePeople' => 'required',
'people' => 'required_if:morePeople,true|array'
];
}
如果请求中存在内容并且复选框被选中,这只会使该字段成为必填字段
效果很好。 +1 到 laravel 了解这些干净的规则。
我也稍微改变了我的代码,看来我不需要在主请求中为嵌套数组添加额外的表单请求。 只需将规则添加到数组属性中,如下所示
public function rules()
{
return [
'morePeople' => 'required',
'people' => 'required_if:morePeople,true|array',
'people.name' => 'required_if:morePeople,true'
];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.