繁体   English   中英

Laravel 表单请求验证集合

[英]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 中使用,以具有验证规则?

如果有人和我有同样的问题,我发现了这个话题

Laravel 5 - 根据需要验证数组,但允许传递空数组

但是,这个对我不起作用。 因为我正在执行 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM